Программирование >>  Программирование на языке c++ 

1 ... 27 28 29 [ 30 ] 31 32 33 ... 159


class my class { public: int a,b,*c;

nfiy class(int A) : a{A),b(a),c(&A) {};

void fun(my class& M)

{ cout M.a \t M.b

V M.c endl;} void main(void)

{ my class ms = my class(100); my class MC = 200;

fun(ms); Результат: 100 100 0x1c640ff6

fun(MC); Результат: 200 200 0x1c640fec

Описание

my class MC = 200;

задает объект МС(200), т. е. в конструктор этого объекта должно быть передано значение 200. Если конструктор имеет только один параметр, то описания my class МС = 200; и my class МС(200); являются эквивалентными. Конструктор

my class(int А) : а(А),Ь(а),с(&А) {};

выполняет следующие действия: а=А, &Ь=а (теперь Ь - это ссылка на а), с=&А. Значение адреса в результатах (типа 0xlc640ff6) на разных компьютерах будет изменяться.

В заключение перечислим основные свойства и правила использования конструкторов: -♦ конструктор имеет то же имя, что и класс, в котором он объявляется;

-♦ конструктор не возвращает значения (даже типа void);

-♦ конструктор не наследуется в производных классах. Если необходимо, то конструктор производного класса может вызвать конструкторы для его базовых классов;

конструктор может иметь аргументы, заданные по умолчанию;

конструктор - это функция, но он не может быть виртуальным (его нельзя объявить с ключевым словом virtual);



-♦ невозможно получить в программе адрес конструктора (указатель на конструктор);

-♦ если конструктор не задан в программе, то он будет автоматически сгенерирован компилятором для построения соответствующих объектов. Все конструкторы, сгенерированные компилятором, имеют атрибут public;

конструктор по умолчанию для класса X - это конструктор, который может быть вызван без аргументов;

конструктор вызывается автоматически только при описании объекта;

-♦ объект, содержащий конструктор, нельзя включить в виде компонента в объединение (union);

-♦ конструктор класса X не может иметь аргумент типа X;

-♦ конструктор класса X может иметь аргумент типа Х& (ссылку на объект типа X);

-♦ конструктор, заданный в виде X::X(const Х&), называется конструктором для копирования (сору constructor) класса X;

-♦ для конструктора работает механизм доопределения имени (function name overloading). Например, можно рассмотреть конструкторы X::X(int), X::X(char), X::X(float) и т. п.

Дополнительные правила использования конструкторов будут рассмотрены в § 3.12 и в гл. 4, 5.

3.5. Разрушение объекта

(деструкторы)

Выше было указано, что конструктор используется для инициализации (построения) объекта. В классе можно также объявить диаметрально противоположную функцию, используемую для разрушения объекта (удаления всей, связанной с объектом, информации из компьютерной памяти). Такая функция называется деструктором (от англ. destructor ). Деструктор имеет то же имя, что и класс, с префиксом тильда (~). Например, для класса my class деструктор будет иметь имя ~my class. Типовое использование деструктора - это освобождение динамической памяти, выделенной ранее конструктором.



Напомним, ЧТО если в классе не объявлены конструкторы и деструкторы, то компилятор автоматически производит их построение. При этом конструктор используется для вьщеле-ния памяти и размещения объекта после его описания, а деструктор - для освобождения памяти после того, как имя объекта становится недействительным.

Рассмотрим пример использования конструктора:

#include <iostream.h>

#include <string.h> файл заголовка для функции strcpy class my class { char* str;

unsigned size; public:

my class(char* s,unsigned SIZE=100); объявление

конструктора ~my class(); объявление деструктора

void displayO { cout str endl; }

my class::my class(char* s,unsigned SIZE) описание

конструктора

{ str = new char[size=SIZE];

cout I am created: size = size endl;

strcpy(str,s); }

my class::~my class{) описание деструктора

{ cout I am destroyed: size = size endl;

delete[] str; } void main(void)

{ my class A( Regards ); второй аргумент

по умолчанию char ss[] = Computer Department of BSUIR ; my class *P = new my class(ss,sizeof(ss)); P->display{); Результат: Computer Department of BSUIR delete P; Результат: I am destroyed: size = 29 A.displayO; Результат: Regards

Здесь выражение

my class *P = new my class(ss,sizeof (ss));



1 ... 27 28 29 [ 30 ] 31 32 33 ... 159

© 2006 - 2024 pmbk.ru. Генерация страницы: 0
При копировании материалов приветствуются ссылки.
Яндекс.Метрика