|
Программирование >> Программирование на языке c++
списка. То же можно сделать, если объект имеет конструктор с аргументами по умолчанию, и мы хотим сконструировать этот объект по умолчанию. Предположим, что my class m имеет второй конструктор с аргументами по умолчанию. Тогда следующее описание является правильным: my class out::my cass out(int а) : object2(a) описание конструктора my class out В этом случае для объекта object2 будет использован конструктор object2(a), а для объекта objectl - конструктор, заданный по умолчанию. Когда объект класса (например, my class out), содержащий компоненты-объекты других классов, разрушается, сначала выполняется деструктор этого объекта (в примере my class out) и затем деструкторы объектов-компонентов в последовательности, обратной последовательности объявлений этих объектов-компонентов. В заключение рассмотрим, как объявляется массив объектов. Если объекты элементы массива имеют конструктор или конструкторы, то один из конструкторов должен обязательно иметь параметры, заданные по умолчанию. При объявлении массива объектов невозможно определить параметры для конструкторов этих объектов и единственная возможность вызова конструкторов - это передача им параметров, заданных по умолчанию. Деструктор должен вызываться для каждого элемента массива, когда массив разрушается. Если память для соответствующих массивов выделена не динамически (без использования оператора new), то это делается автоматически. Если же память для массива выделяется динамически (с помощью оператора new), то деструкторы автоматически вызваны не будут. В этом случае надо использовать оператор delete для массивов, который задается в форме deleteH, например: void function(void) { my class* m c=new my class[10]; delete[] m c; Пример 7, который приводится ниже, демонстрирует объявление массива объектов. Рассмотрим примеры, на которые были сделаны ссылки в этом параграфе. Пример 1 показывает объявление и разрушение глобальных объектов. #inclucle <iostream.h> #include <conio.h> class A { int i; public: A(int I) : i(l) { cout class A i constructor\n ;} ~A() { cout class A i destructor\n ; } A a1(1),a2{2); объявление глобальных объектов void main(void) { getch(); приостановка программы до нажатия любой клавиши Результаты выполнения этой программы представятся в виде: class А1 constructor class А2 constructor < здесь надо нажать любую клавишу > class А2 destructor class А1 destructor Пример 2 показывает объявление и разрушение локальных объектов. #include <iostream.h> #include <conio.h> class A { int i; public: A(int I) : i(l) { cout class A i constructor\n ; } -AO { cout class A i destructor\n ; } void function(void) { cout begin\n ; A a1(1),a2(2); объявление локальных объектов cout end\n ; } void main(void) { cout before\n ; functionO; вызов функции cout after\n ; getch(); приостановка программы до нажатия любой клавиши Результаты выполнения этой программы представятся в виде: before begin class Al constructor class A2 constructor end class A2 destructor class Al destructor after < здесь надо нажать любую клавишу > Пример 3 демонстрирует объявление глобальных статических объектов. #include <iostream.h> #include .<conio.h> class A { int i; public: A(int I): i(!) { cout class A i constructor\n ; } -AO { cout class A i destructor\n ; } static A a1(1),a2(2); объявление глобальных статических объектов void main(void)
|
© 2006 - 2024 pmbk.ru. Генерация страницы: 0
При копировании материалов приветствуются ссылки. |