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

Статические члены класса

В С++ можно использовать статические члены класса, которые являются общими для всех объектов данного класса. Статические члены класса объявляются с атрибутом памяти static. Изменив значение статического члена класса в одном объекте, получаем изменившееся значение в других объектах данного класса. Объявление статических членов – данных класса внутри объявления класса не является описанием, т. е. Под эти данные не выделяется память. Описание данных должно быть выполнено дополнительно. При использовании статического элемента все объекты ссылаются на одно и то же место в памяти.

В С++ можно использовать статические члены-функции класса. Они не получают указатель this, соответственно эти функции не могут обращаться к нестатическим членам класса. К статическим членам класса статические функции-члены класса могут обращаться посредством операции точка или ->. К статическим данным – членам класса и статическим функциям-членам класса можно обращаться, даже если не создано ни одного объекта данного класса, надо только использовать полное имя члена класса.

Пример использования статических членов класса для подсчета числа существующих и созданных объектов класса.

#include <iostream.h>

class st

{

static int count1;

static int count2;

public:

static void show_count(void);

st(void); // конструктор

~st(void); // деструктор

};

st::st(void)

{ count1++; count2++; }

st::~st(void)

{ count2--; }

void st::show_count(void)

{

cout<<”Создано объектов:”<<count1<<endl;

cout<<”Существует объектов:”<<count2<<endl;

}

int st::count1;

int st::count2; // описание переменных

void main(void)

{

st::show_count(); // вызов функции до создания объектов

st a,b,c,*p;

a.show_count();

{

st x,y,z;

st::show_count(); // эти два вызова

z.show_count(); // дадут одинаковый результат

}

p=new st;

st::show_count();

delete p;

st::show_count():

}

Локальные классы

Класс объявленный внутри функции называется локальным классом (local class). Функция, в которой объявлен локальный класс, не имеет специального доступа к членам локального класса. Локальный класс не может иметь статических членов – данных.

Объект локального класса может быть создан только внутри функции, области действия объявления класса. Все функции-члены локального класса должны быть объявлены внутри объявления класса, т.е. быть подставляемыми функциями. Пример использования локальных классов

#include <iostream.h>

Void f(void);

Void main(void)

{ f(); }

Void f(void)

{

class local_class

{

int who;

public:

local_class(int a)

{

who=a; cout<<”Конструктор локального класса “<<who<<endl;

}

~local_class(void)

{ cout<<”Деструктор локального класса “<<who<<endl; }

} obj1(1), obj2(2);

}

Вложенные классы

В С++ допустимо использование вложенных классов (nested). Вложенный класс находится в области действия объемлющего класса, соответственно объекты этого класса могут использоваться как члены этого класса или в функциях – членах класса. Функции – члены класса и статические члены вложенного класса могут быть описаны в глобальной области действия.

Пример использования вложенных классов:

class C

{

class nested_class

{ int who;

public:

nested_class(int a);

~nested_class(void);

};

public:

C(int b);

{

nested_class obj(b*b); cout<<”Конструктор класса С”<<endl;

}

~C(void)

{ cout<<”Деструктор класса С”<<endl; }

};

C::nested_class::nested_class(int a)

{

cout<<”Конструктор вложенного класса “<<who<<endl;

}

C::nested_class::~nested_class(int a)

{ cout<<”Деструктор вложенного класса “<<who<<endl; }