ВУЗ:
Составители:
Рубрика:
10
а) когда объект передается функции по значению;
б) при построении временного объекта как возвращаемого значения
функции;
в) при использовании объекта для инициализации другого объекта.
Если класс не содержит явным образом определенного конструктора
копирования, то при возникновении одной из этих трех ситуаций произво-
дится побитовое копирование объекта. Побитовое копирование не во
всех
случаях является адекватным. Именно для таких случаев и необходимо оп-
ределить собственный конструктор копирования. Например, в классе
string:
string(const string& st)
{len=strlen(st.len);
ch=new char[len+1];
strcpy(ch,st.ch); }
Можно создавать массив объектов, однако при этом соответствую-
щий класс должен иметь конструктор по умолчанию (без параметров).
Массив объектов может инициализироваться либо автоматически
конструктором по умолчанию, либо явным присваиванием значений каж
-
дому элементу массива.
class demo{
int x;
public:
demo(){x=0;}
demo(int i){x=i;}
};
void main(){
class demo a[20]; //вызов конструктора без параметров(по умолча-
нию)
class demo b[2]={demo(10),demo(100)};//явное присваивание
Деструктор.
Динамическое выделение памяти для объекта создает необходимость
освобождения этой памяти при уничтожении объекта. Например, если
объект формируется как локальный внутри блока, то целесообразно, чтобы
при выходе из блока, когда уже объект перестает существовать,
выделен-
ная для него память была возвращена. Желательно, чтобы освобождение
памяти происходило автоматически. Такую возможность обеспечивает
специальный компонент класса – деструктор класса. Его формат:
~имя_класса(){операторы_тела_деструктора}
10 а) когда объект передается функции по значению; б) при построении временного объекта как возвращаемого значения функции; в) при использовании объекта для инициализации другого объекта. Если класс не содержит явным образом определенного конструктора копирования, то при возникновении одной из этих трех ситуаций произво- дится побитовое копирование объекта. Побитовое копирование не во всех случаях является адекватным. Именно для таких случаев и необходимо оп- ределить собственный конструктор копирования. Например, в классе string: string(const string& st) {len=strlen(st.len); ch=new char[len+1]; strcpy(ch,st.ch); } Можно создавать массив объектов, однако при этом соответствую- щий класс должен иметь конструктор по умолчанию (без параметров). Массив объектов может инициализироваться либо автоматически конструктором по умолчанию, либо явным присваиванием значений каж- дому элементу массива. class demo{ int x; public: demo(){x=0;} demo(int i){x=i;} }; void main(){ class demo a[20]; //вызов конструктора без параметров(по умолча- нию) class demo b[2]={demo(10),demo(100)};//явное присваивание Деструктор. Динамическое выделение памяти для объекта создает необходимость освобождения этой памяти при уничтожении объекта. Например, если объект формируется как локальный внутри блока, то целесообразно, чтобы при выходе из блока, когда уже объект перестает существовать, выделен- ная для него память была возвращена. Желательно, чтобы освобождение памяти происходило автоматически. Такую возможность обеспечивает специальный компонент класса – деструктор класса. Его формат: ~имя_класса(){операторы_тела_деструктора}
Страницы
- « первая
- ‹ предыдущая
- …
- 7
- 8
- 9
- 10
- 11
- …
- следующая ›
- последняя »