Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Конструкторы и деструкторы.doc
Скачиваний:
24
Добавлен:
18.04.2015
Размер:
184.83 Кб
Скачать

Void main ( )

{ Book tip1 (“Turbo Pascal”, “B.B.Фаронов”, 60.0) ;

Book tip2(“Язык С++” , “В.В.Подбельский”,62.0 );

Tip1.show_book( );

Tip2.show_book( );

}

Turbo Pascal , 60.0

Язык С++ , 62.0

Уничтожение экземпляра : Язык С++

Уничтожение экземпляра : Turbo Pascal

  1. class stroka {

char*ch // указатель на строку на символьный массив

int len //длина строки

public:

stroka( char*cch) // конструктор1

{ len = strlen(cch) ; ch=new char [len+1];

strcpy (ch,cch); } ;

stroka(int N=20) // конструктор 2

{ ch= new char[N+1}; len=0; ch[0]=’\0’}

int len_str(void) { return len;} // возвращает длину

//строки

char * string (void) {return ch;} // возвращает указатель на строку

Void vivod ( ) // выводит данные

{ cout<< “строка: “ <<ch <<” , длина строки=”<<len;};

~stroka( ) // деструктор

{ delete []ch ;} ;

}

Void main ( )

{ stroka S1( “Миру-мир”);

S1.vivod;}

Деструктор автоматически освободит память.

Деструктор идеальное место для всей общей работы по очистке, напр.: освобождение памяти, сохранение данных в файлах , закрытие файлов…

Компонентные данные

  1. При обращении к данным из компонентных функций используется только

имя компонента

  1. При обращении к компонентам из операторов, выполняемых вне класса

( если позволяет статус доступа)

имя объекта. имя компонента

указатель на объект -> имя компонента

  1. Данные класса (а также компонентные функции) не обязательно должны быть описаны до первого обращения к ним в классе. Т.е. все компоненты класса видны во всех операторах его тела.

В связи с этим отличием введена особая область видимости – класс(наряду сфайлом , блоком ифункцией).

  1. Каждый объект класса имеет свою копию данных класса, кроме статических данных. Статический компонент (static) не тиражируется, существует в единственном экземпляре

Статические компоненты класса необходимо описывать и инициировать

вне определения класса как глобальные переменные.

Обращаться к ним можно до определения первого объекта класса с

помощью квалифицированного имени:

Имя класса ::имя компонента

Если объекты объявлены, то к статическому компоненту можно

обращаться стандартно, и всякое изменение статического компонента в одном объекте становится видно во всех объектах.

Если статический элемент имеет статус private илиprotected к нему можно обращаться только из компонентных функций. Если надо обратиться до определения объектов, надо ввестистатическую компонентную функцию,со спецификаторомstatic, которую можно вызывать до определения объектов с помощью квалифицированного имени:

имя класса ::имя статической функции (параметры )

Пример:

Class cot

{ …;

static int N;// статический компонент

public: …

static void count(int value) { N = value} ;

};

int cot::N=0; // внешняя инициализация статического элемента