
- •Int main (int argv, char * argc[])
- •Int main (int argv, char * argc[]);
- •Void func1 ( a& a );
- •Void func2 ( a a );
- •Void swap (int a, int b)
- •Void swap (int &a, int &b)
- •Int Year;
- •Int Month;
- •Создание и уничтожение объектов в c#. Интерфейс iDisposable и освобождение ресурсов.
- •Int m_nYear;
- •Int m_nMonth;
- •Int m_nDay;
- •Inline int even(int X)
- •System.Collections.Generic.IEqualityComparer(Of t)
- •Public:
- •Virtual int GetHashCode()
- •Ассоциативные и последовательные контейнеры stl. Понятие итератора. Общие свойства контейнеров. Особенности и применение каждого из контейнеров.
- •// Do what you need with element using *I ;
- •Vint v1, v2(100);
- •Vint v3(v2.Begin(), --v2.End());
- •Sort(V.Begin(), V.End());
- •Setstr s, s2;
- •Использование контейнеров stl. Методы резервирования памяти контейнерами stl. Требования к элементам контейнеров.
- •C.Insert(s);
- •Обобщенные контейнеры .Net. Интерфейс iEnumerable и оператор foreach. Сравнение обобщенных контейнеров и ArrayList.
- •IEnumerable - интерфейс
- •Int m_nCount;
- •Int sprintf(buffer, format-string[, argument...]); char *buffer;
- •Язык регулярных выражений. Классы символов, исчислители, последовательности и несимвольные подстановки. Валидация email адреса при помощи регулярных выражений.
- •If (rx.IsMatch(testString))
- •Язык регулярных выражений. Классы символов, исчислители, альтернативы и подстановки. Применение регулярных выражений для изменения формата даты.
- •If (rx.IsMatch(testString))
- •Язык регулярных выражений. Классы символов, исчислители, альтернативы и последовательности. Выбор всех атрибутов href из html текста.
- •If (rx.IsMatch(testString))
- •Обработка исключений. Правила перехвата исключений. Назначение системы обработки исключений. Для чего система обработки исключений не предназначена.
- •Int operator / (cMyClass o, int I) {
- •Void main() {
- •Наследование, иерархии классов и обобщенная обработка данных. Чистый полиморфизм (полиморфизм виртуальных методов). Интерфейсы и абстрактные классы.
- •Int m_nCount;};
- •Int m_nCount;
- •Int m_nCount;
- •Int m_nCount;
- •Virtual string Iam(){return "furniture";}
- •Рекурсия. Рекуррентные структуры данных и рекурсивные алгоритмы. Алгоритм просмотра дерева каталогов файловой структуры.
- •Рекуррентное определение выражений. Алгоритм анализа и вычисления выражений (программа ”калькулятор”).
Int m_nYear;
Int m_nMonth;
Int m_nDay;
public:
CDate();
CDate(int Year, int Mon=1, int Day=1);
~CDate() {}
bool operator < (CDate &d) {
return m_nYear < d.m_nYear || (m_nYear == d.m_nYear && m_nMonth < d.m_nMonth) || (m_nYear == d.m_nYear && m_nMonth == d.m_nMonth && m_nDay < d.m_nDay);}};
Фактически мы определили метод класса, который включает ключевое слово operator и значок операции. Сделали это inline.
Теперь наши объекты можно сравнивать, например:
cout << (t < d) << “ “ << (d < e) << endl;
Оператор < возвращает булевское значение. Что бы сделать это понятнее приведем две эквивалентных формы записи:
t < d;
t.operator<(d);
Т.е. запись операции эквивалентна вызову функции специального вида. Эта функция возвращает булевское значение, которое и должно возникать в результате операции сравнения.
Эта возможность C++ позволяет не только сделать разработанные нами классы неотличимыми от встроенных типов, но и добиться высокой наглядности текстов программ, а так же открывает возможность для применения шаблонов.
Для C#
В C# используются два вида операторов унарные и бинарные( операторы, для которых указываются два операнда). Для их перегрузки используют 2 метода
Public static ret-type operator op(param-type operand)
{//операции}
Public static ret-type operator op(param-type operand1, param-type operand2)
{//операции}
Эффективность программ и inline методы:
Когда возвращается ссылка, то повышается эффективность, поскольку очевидный способ реализации ссылки - это указатель, а передача указателя гораздо дешевле, чем передача большой структуры данных.
В С++ можно задать функцию, которая на самом деле не вызывается, а её тело встраивается в программу в месте её вызова. Она действует почти так же как, как мокроопределение с параметром в С. Они не связаны с механизмом вызова функций и возврата ими значений. Поэтому могу выполняться гораздо быстрее. Недостатком является то, что если они слишком большие и вызываются слишком часто, объем программ сильно возрастает. Из-за этого применение встраиваемых функций обычно ограничивается короткими функциями. Для объявления встраиваемой функции нужно пере ней написать inline. Пример:
Inline int even(int X)
{
Return!(x%2);}
Возвращает истину при чётном аргументе. Функция должна быть определена до того как будет использована. Inline для компилятора является запросом, а не командой. Если компилятор не в состоянии выполнить запрос, функция будет компилироваться как обычная функция, а запрос inline проигнорирован.
Назначение метода GetHashCode в .Net.
В ряде случаев возникает необходимость реализации интерфейса IEqualityComparer(Of T). Это может понадобиться для работы инструкции Distinct в LINQ-запросах или соответствующей функции, для удаления из коллекции повторяющихся элементов, в ситуации, когда равенство объектов надо определить по-своему; и для коллекции System.Collections.Generic.HashSet(Of T), которая не принимает двух одинаковых объектов, однако их "одинаковость" может определяться при помощи объекта реализующего данный интерфейс.
В целом реализация этого интерфейча не вызывала бы сложностей, если бы не одно "но", а именно - функция GetHashCode.
Начнём по порядку.