- •1.Конструктор копирования
- •2.Перегрузка переопределение функц
- •3.Перегрузка бинарных операторов
- •4.Перегрузка унарных операторов
- •5.Static- и Const- компоненты класса
- •6.Организация внешн.Доступа к лок.Комп. Класса(Спецификатор friend)
- •7.Proxi-классы
- •8.Наследование простое
- •9.Множественное наследование
- •10.Виртуальные функции
- •11.Абстрактные классы
- •13.Шаблоны.Параметрезированные классы
- •12.Виртуальный деструктор
- •14.Совместное использование шаблонов и наследование
- •15.Реализация smart-указателя
- •16.Классы поддерживающие транзакцию
- •17.Преобразование типа.Явное преобразование типа
- •18.Преобразование типов определённых в программе
- •20.Строковые потоки,их свойства,назначение.
- •22.Организация файла последовательного доступа
- •24.Генерация исключений в конструкторах.Иерархия искл.В станд.Библиотеке
- •23.Организация файла произвольного доступа
- •25. Спецификации исключительных ситуаций
- •27. Исключительные ситуации.Основы обработки исключительных ситуаций
- •28. Задание собственного неожиданного обработчика
- •29. Исключительная ситуация, генерируемая оператором new
- •30. Перенаправление исключительных ситуаций
- •31.Категории итераторов.Основные итераторы
- •32. Категории итераторов.Основные итераторы
- •33.Пасивные и активные итераторы
- •34. Контейнеры последовательностей
- •35.Ассоциативные контейнеры
- •36.Адаптеры контейнеров
- •37.Патеррн (Абстрактная фабрика)
- •38.Патеррн (Строитель)
- •39. Патеррн (Адаптер)
- •40.Патеррн (Команда)
- •41.Спецификатор final в java
- •42.Вложенные и внутренние классы в java
- •43.Основы наследования в java
- •47.Абстрактные классы в java
- •44.Использование ключевого слова super в java
- •50.Интерфейсы в java
- •51.Множественное наследование в java
- •52.Конфликты имён при комбинировании интерфейсов в java
- •53.Расширение интерфейса в java
- •54. Исключительные ситуации. Обработка исключений java
1.Конструктор копирования
Общий вид конструктора копирования имеет следующий вид:
имя_класса (const имя_класса & );
Конструктор выполняет все необходимые действия при вызове функции и копировании содержимого объекта в стек (из стека). Вызов конструктора копирования осуществляется при обращении к функции и передаче в нее в качестве параметра объекта (объектов), а также возврата значения (объекта) из функции.
Если для класса конструктор копирования явно не описан, то компилятор сгенерирует его. При этом значения одной компоненты-данного будут скопированы в компоненту-данное другого объекта. Это допустимо для объектов простых классов и недопустимо для объектов, имеющих динамические компоненты-данные (конструируются с использованием операторов динамического
выделения памяти).
2.Перегрузка переопределение функц
Одним из подходов реализации принципа полиморфизма в языке С++ является использование перегрузки функций. В С++ две и более функций могут иметь одно и то же имя. Компилятор С++ оперирует не исходными именами функций, а их внутренним представлением, которое учитывает количество и тип принимаемых аргументов. В то же время тип возвращаемого функцией значения не учитывается. Поэтому для компилятора функции с различным списком аргументов – это разные функции, а с одинаковым списком аргументов, но с разными типами возвращаемого значения – одинаковые. Для корректной работы программ последнего следует избегать. Функции, имеющие одинаковые имена, но разные списки аргументов, называются перегруженными.
class cls {int n;double f;
public: cls(int N,float F) : n(N),f(F) {}
int sum(int k){ n+=k; return n;}
double sum(double k){ f+=k; return f;}
void see(){cout <<n<<' '<<f<<endl;}};
void main(){ cls obj(1,2.3); obj.see();cout <<obj.sum(1)<<endl; cout <<obj.sum(1.)<<endl; }
3.Перегрузка бинарных операторов
Функция operator для перегрузки (доопределения) бинарных операторов может быть описана двумя способами:
как компонента-функция класса с одним аргументом;
как глобальная функция (функция, описанная вне класса) с двумя аргументами.
При перегрузке бинарного оператора # выражение a#b может быть представлено при первом способе как a.operator#(b) или как operator #(a,b) при втором способе перегрузки.
*, = , > и ==
class dek_koord
{ int x,y; public: dek_koord(){};
dek_koord(int X,int Y): x(X),y(Y) {}
dek_koord operator*(const dek_koord );};
dek_koord dek_koord::operator*(const dek_koord a)
{ dek_koord tmp; tmp.x=x*a.x; tmp.y=y*a.y;return tmp;}
void main(){ dek_koord A(1,2), B(3,4), C;
A.see(); B.see(); C=A*B; C.see();}
4.Перегрузка унарных операторов
При перегрузке унарной операции функция operator не имеет параметров. Унарный оператор, может быть перегружен двумя способами:
как компонента-функция без аргументов;
как глобальная функция с одним аргументом.
унарный оператор может быть префиксным и постфиксным. Для любого префиксного унарного оператора выражение #a может быть представлено при первом способе как a.operator#(), а при втором как #operator(a). При перегрузке унарного оператора в постфиксной форме, выражение вида a# при первом способе как a.operator#(int) или как operator#(a,int) при втором способе. При этом аргумент типа int не существует и используется для отличия префиксной и постфиксной форм при перегрузке.
class dek_koord{ int x,y; public: dek_koord(){};
dek_koord(int X,int Y): x(X),y(Y) {}
void operator++(); void operator++(int);
void see();};
void dek_koord::operator++() // ++A { x++;}
void dek_koord::operator++(int) // A++ { y++;}
void dek_koord::see()
{ cout << " х = " << x<< "y = " << y;}
void main(){ dek_koord A(1,2), B, C; A.see(); A++; A.see();}