
- •Конструкторы и деструкторы
- •Формат компонентной функции-деструктора
- •Void main () {
- •Void main()
- •Void main()
- •Конструктор с аргументами, задаваемыми по умолчанию
- •Void main ()
- •Void shownumber ( void)
- •Конструктор по умолчанию
- •Конструктор копирования
- •Int GetX ( ) { return X; }
- •Int GetX ( ) { return X; }
- •Int GetY ( ) { return y; }
- •Void Print ( t obj )
- •Void main () {
- •Void main ( )
- •Void main ( )
- •Void vivod ( ) // выводит данные
- •Void main ( )
- •Имя класса ::имя компонента
- •Void main ( )
- •Тип данных(имя класса ::*имя указателя)
- •Имяобъекта.* указатель на компонент данных;
- •Имя объекта.*указатель на метод(параметры);
- •Компонентные функции
- •Initgraph( тип графического драйвера, режим адаптера , путь к драйверу)
- •Void far initgraph (int far * graphdriver, int far * graphmode, char far * pathtodriver);
- •Void point :: show (void)
- •Void point :: hide(void)
- •Void main ( )
- •Указатель this
- •Void print ( void) void print ( void)
- •Void main ()
- •Void que::add(void)
- •Void que::print (void)
- •Void main( )
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
… 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;}
Деструктор автоматически освободит память.
Деструктор идеальное место для всей общей работы по очистке, напр.: освобождение памяти, сохранение данных в файлах , закрытие файлов…
Компонентные данные
При обращении к данным из компонентных функций используется только
имя компонента
При обращении к компонентам из операторов, выполняемых вне класса
( если позволяет статус доступа)
имя объекта. имя компонента
указатель на объект -> имя компонента
Данные класса (а также компонентные функции) не обязательно должны быть описаны до первого обращения к ним в классе. Т.е. все компоненты класса видны во всех операторах его тела.
В связи с этим отличием введена особая область видимости – класс(наряду сфайлом , блоком ифункцией).
Каждый объект класса имеет свою копию данных класса, кроме статических данных. Статический компонент (static) не тиражируется, существует в единственном экземпляре
Статические компоненты класса необходимо описывать и инициировать
вне определения класса как глобальные переменные.
Обращаться к ним можно до определения первого объекта класса с
помощью квалифицированного имени:
Имя класса ::имя компонента
Если объекты объявлены, то к статическому компоненту можно
обращаться стандартно, и всякое изменение статического компонента в одном объекте становится видно во всех объектах.
Если статический элемент имеет статус private илиprotected к нему можно обращаться только из компонентных функций. Если надо обратиться до определения объектов, надо ввестистатическую компонентную функцию,со спецификаторомstatic, которую можно вызывать до определения объектов с помощью квалифицированного имени:
имя класса ::имя статической функции (параметры )
Пример:
Class cot
{ …;
static int N;// статический компонент
public: …
static void count(int value) { N = value} ;
};
int cot::N=0; // внешняя инициализация статического элемента