Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
OOP_otvety.doc
Скачиваний:
0
Добавлен:
01.05.2025
Размер:
1.9 Mб
Скачать
  1. Статические компоненты класса.

Описатель static в С++ имеет различное назначение в зависимости от контекста, в котором он применен.

Переменные и функции, объявленные вне класса и вне тела функции с описателем static, имеют область действия, ограниченную файлом, в котором они объявлены.

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

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

class TBase //базовый класс для массивов всех типов

{ static int nw;

int size, //размер элемента

count, //текущее число элементов

maxCount, //размер выделенной памяти

delta; //приращение памяти

/* Другие компоненты класса TBase */

}

int TBase::nw =1; /* Инициализация статической компоненты класса */

Статические компоненты - функции могут вызываться до создания экземпляров объектов этого класса и поэтому имеют доступ только к статическим данным класса:

class X

{ static int sx1,sx2;

static void fsx ( int k);

int x1,x2;

/* Другие компоненты класса X */

}

int X::sx1 = 1;

int X::sx2 = 2;

int main ()

{ ..........

X:: fsx( 3 );

..............

}

  1. Пространства имен.

  1. Иерархия классов ( последовательность работы конструкторов и деструкторов )

Один класс может быть базовым для нескольких производных, производный класс может быть, в свою очередь, базовым для какого-либо класса и т.д. Если производный класс имеет несколько базовых, то такое наследование называется множественным. Принято называть ба-зовый класс родительским, а производный – потомком.

При создании объектов производного класса сначала автоматически вызываются конструкторы базовых классов согласно списку базовых классов в объявлении производного класса, а затем конструктор производного класса. Конструкторы базовых классов вызываются независимо от того, перечислены они явно в конструкторе производного класса или нет. Объекты разрушаются в порядке, обратном их созданию, т.е. вначале вызывается деструктор производного класса, а затем базового.

В базовом и производном классах функции могут иметь одно и то же имя и список параметров, но отличаться телом. (Такие функции называют подмененными.) Для различения функций используется оператор принадлежности.\\\

Объявлена иерархия классов двух простых геометрических объектов: окружности и цилиндра.

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

class SimpleButton: public : TButtonControl { public:

SimpleButton (int x, int y) ;

void Draw() ;

-SimpleButton() { } );

SimpleButton::SimpleButton(int x, int y) :

TButtonControl(x, y) { }

I void SimpleButton::Draw()

I { i outline->Draw();

1 )

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]