
- •Статические элементы класса
- •Эти поля существуют для всех объектов класса в единственном экземпляре, то есть не
- •2. Статические поля доступны как через имя класса, так и через имя объекта.
- •4. Память, занимаемая статическим полем, не учитывается при определении размера с помощью операции
- •Пример описания и использования статических функций.
- •Функции и объекты, объявляемые с декларацией const
- •-может вызывать только константные методы;
- •Пример класса с константными методами.
- •Пример использования константных и неконстантных методов константными и неконстантными объектами
- •Имитационное моделирование с применением ООП на примере микроволновой печи
- •3.Если дверь открыта, нажатие кнопки не имеет эффекта.
- •Функцию управления берет на себя пользователь, то есть управление осуществляется с клавиатуры.
- •Необходимые функции (методы класса):
- •class stove
- •//stove.cpp
- •stove::stove()
- •else
- •void stove::ready(void)
- •//mainfile.cpp
- •Дружественные классы
- •class System
- •2) свойство дружественности не транзитивно, то есть, если класс А дружественен классу В,
- •class A;
- •Дружественные функции
- •Правила описания и особенности
- •3) одна функция может быть дружественной сразу нескольким классам.
- •class One
- •int main()
- •Контейнерные классы
- •class Dog
- •Иерархия классов
- •Базовый класс
- •Пример 1. Простое наследование (поля в базовом классе приватные)
- •Пример 2. Простое наследование (поля в базовом классе защищённые)
- •int main() { TDerived d;
- •Спецификаторы доступа базовых классов
- •Пример. Наследование с доступом protected
- •TBase b; b.SetCount(20);
- •Пример. Порядок вызова конструкторов
- •class Third: public Second
- •Конструкторы вызываются в следующем порядке:
- •Порядок вызова деструкторов
- •class Second: public First
- •int main() { Third t; return 0;
- •Разрешение области видимости
- •class B : public A {public:
- •Вэтом случае компилятор действует по следующему алгоритму: если имя в базовом классе переобъявляется
- •Пример 1. Обращение к методу базового класса из метода производного
Контейнерные классы
Контейнерные классы – это классы, которые содержат в своем описании один или несколько объектов других классов или указатели на объекты.
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;
}
Порядок вызова конструкторов
Если класс является производным, то должен быть вызван конструктор базового класса, а затем конструктор производного класса.