Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
OOP / lectures / 1_oop.ppt
Скачиваний:
66
Добавлен:
03.03.2016
Размер:
546.3 Кб
Скачать

Контейнерные классы

Контейнерные классы – это классы, которые содержат в своем описании один или несколько объектов других классов или указатели на объекты.

class Tail {int length; public:

Tail(int n) {length=n;}

int GetTail() {return length;}

};

class Dog

{

Tail tail; public:

Dog(int n):tail(n) {}; void DisplayPar() {

printf(“%d\n”,tail.GetTail());};

}

};

int main()

{ Dog d(20); d.DisplayPar(); return 0;

}

Иерархия классов

Наследование – это механизм получения нового класса из существующего.

Производный класс наследует описание базового.

При этом производный класс может использовать элементы базового, изменять и дополнять их.

Простое наследование

Простое наследование – это такое наследование, при котором порождаемые классы наследуют методы и свойства одного базового класса.

Базовый класс

Производный

ПК

 

ПК

класс А

 

 

 

 

 

 

 

 

Производный

класс Б

Производные классы могут наследовать любые данные и функции базового класса, кроме конструктора и деструктора.

Не существует ограничений на количество производных классов.

Пример 1. Простое наследование (поля в базовом классе приватные)

class TBase {private:

int count; public:

TBase() {count=0;}

int GetCount() {return count;} void SetCount(int n) {count =n;}

};

class TDerived:public TBase {public:

TDerived():TBase() {};

void incr(int n) {SetCount(GetCount()+n);}

};

Пример 2. Простое наследование (поля в базовом классе защищённые)

class TBase {protected: int count;

public:

TBase() {count=0;}

int GetCount() {return count;} void SetCount(int n) {count =n;}

};

class TDerived:public TBase {public:

TDerived():TBase() {}; void incr(int n) {count+=n);}

};

int main() { TDerived d;

//d.count=15; Ошибка!!! d.SetCount(15); d.incr(10);

printf("%d\n",d.GetCount());

return 0;

}

Спецификаторы доступа базовых классов

Ключ доступа

private

1)class TDerived: private TBase {};

2)class TDerived: TBase {};

protected

class TDerived: protected TBase {};

public

class TDerived: public TBase {};

Доступ в

Доступ в

базовом

производном

классе

классе

private

private

protected

private

public

private

private

private

protected

protected

public

protected

private

private

protected

protected

public

public

Пример. Наследование с доступом protected

class TDerived:protected TBase {public:

TDerived():TBase() {}; void incr(int n) {count+=n;}

};

int main() { TDerived d;

//d.SetCount(15); Ошибка доступа!!! d.incr(10);

//printf("%d\n",d.GetCount()); Ошибка доступа!!!

TBase b; b.SetCount(20);

printf("%d\n",b.GetCount());

...

return 0;

}

Порядок вызова конструкторов

Если класс является производным, то должен быть вызван конструктор базового класса, а затем конструктор производного класса.

Соседние файлы в папке lectures