Void main ( ). Имя объекта. имя компонента

Class cot

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

Void main ()

Turbo Pascal, 60.0

Язык С++, 62.0

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

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

2. … 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;};

}

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

S1.vivod;}

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

Пример:

{ …;

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

public: …

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

};

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

{ cot::count(500); …

//изменение статического компонента до объявления объектов

}

5) Указатели на компоненты класса

Определение указателя на компонентные данные класса:

тип данных(имя класса::*имя указателя)

В определение можно включить и инициализацию

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

int (stroka::*plen)=&stroka::len;

// - не верно, т.к. len – имеет статус private

При инициализации надо использовать общедоступные компоненты.

После объявления объекта к его компонентам следующий формат обращения через указатель:

имя объекта.* указатель на компонент данных;

Если определен указатель на объект формат обращения:

Указатель на объект-> *указатель на компонент данных;

Определение указателей на компонентные функции

Тип возвращаемого результата (имя класса::*имя указателя на метод)

(спецификация параметров функции);

void (book::*fprt)(void) = & book::show_book;

// определение указателя на компонентные функции класса book и

// инициализация указателя компонентной функцией show_book

И форматы обращения к методам через указатели:

Имя объекта.*указатель на метод(параметры);

Указатель на объект-> *указатель на метод (параметры);

Пример:

book A (“C и C++”, “Б.И.Березин», 40.0); // определен объект

void (book::*fprt)(void) = & book::show_book;

(A.*fptr) () // выведет на печать значения объекта

Если в определении класса было бы несколько идентичных функций указатель fptr можно “настроить” на другие функции


Понравилась статья? Добавь ее в закладку (CTRL+D) и не забудь поделиться с друзьями:  



double arrow
Сейчас читают про: