- •Указатель this
- •Void print ( void) void print ( void)
- •Void main ()
- •Void que::add(void)
- •Void que::print (void)
- •Void main( )
- •Перегрузка функций
- •Void f ( int );
- •Void f (int, int);
- •Void f ( char* );
- •Void f ( int)
- •Void main ()
- •Void main ( )
- •Перегрузка конструкторов
- •Перегрузка стандартных операций
- •Void main ( )
- •Void main ( )
- •Void vivod ( ) // выводит данные
- •Void main ( )
- •Void display( )
- •Void main ( )
- •Перегрузка операции присваивания
- •Объект1
- •Int GetX ( ) { return X; }
- •Void main ()
- •Блокировка копирования и присваивания:
- •Преобразование типов в классах пользователя
Блокировка копирования и присваивания:
Для того, чтобы исключить непреднамеренное дублирование объекта класса, надо в его закрытой части объявить конструктор копирования и перегрузку операции присваивания.
private :
A ( A& );
A operator = ( A &) ;
И тогда ни одно из приведенных в главной функции дублирований объектов скомпилировать не удастся.
Преобразование типов в классах пользователя
Иногда в выражениях целесообразно использовать переменные класса (объекты) с переменными других типов, для этого необходимо определить правила преобразования.
Это можно сделать с помощью перегруженного конструктора класса или с помощью операции – функции преобразования типов.
Рассмотрим опять класс Complex.
Недостаток описания состоит в том, что нельзя выполнять комплексные операции комплексного числа с арифметическими данными:
Complex c1( 5.5, 6.5);
Complex c2= c1+ 2;
Complex c2= c1+ ‘0’;
В этом случае компилятор будет пытаться создать временный объект Complex (2), но наш конструктор с двумя параметрами, поэтому скомпилировать нам это не удастся.
Надо объявить конструктор такого вида:
Complex (float r =0, float i =0)
{ re = r ; im = i ; },
который позволит, например, создавать объекты:
Complex c1( 1.5, 2.5);
Complex c1( 4.5);
Complex c1;
Рассмотрим операторы описанные выше:
2 преобразуется к 2.0 ,затем создается временный объект, вызовом конструктора с умалчиваемыми значениями , с данными(2.0, 0.0) .
В результате создается объект с2 с данными (7.5, 6.5).
2) ‘0’ преобразуется в целое 48, которое преобразуется в вещественное
48.0, создается временный объект с данными ( 48.0, 0.0).
В результате создается объект с данными (53.5, 6.5).
Иногда бывает необходимость преобразовать переменные некоторого класса в базовые типы.
Проблема решается с помощью специального оператора преобразования типа.
Рассмотрим это преобразование для класса stroka. Преобразование типа stroka в тип char*.
Чтобы объекты класса можно было бы передавать функциям модуля string.h, надо в описание класса включить компонентную функцию:
1)
operator char* ( ) { return ch; } (1)
И тогда в предложении
stroka s1(“string”)
char* s = s1;
произойдет преобразование объекта s1 к типу char* , правило (1), и переменной s присвоится значение“string”.
2)
Аналогично можно определить в классе преобразование:
operator int ( ) { return len; } (2)
И тогда в предложении :
int l = s1;
переменная класса (объект s1) преобразуется к целому значению по правилу описанному в операторе преобразования (2).
Вопросы:
В чем суть объектно-ориентированного подхода к программированию? Дать определение класса.
Определение объекта класса по имени и с помощью указателя и динамического выделения памяти
Обращение к компонентам объекта
Что такое статический элемент класса
Что такое друзья класса
Что такое конструкторы и деструкторы. Какие типы конструкторов вы знаете?
Когда необходимо описывать конструктор копирования?
