- •Статические элементы класса
- •Эти поля существуют для всех объектов класса в единственном экземпляре, то есть не
- •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 First
{
public:
First(){printf("Конструктор First\n");}
};
class Second: public First
{
public:
Second(){printf("Конструктор Second\n");}
};
class Third: public Second
{
public:
Third(){printf("Конструктор Third\n");}
};
int main() { Third t;
…
return 0;
}
Конструкторы вызываются в следующем порядке:
First::First()
Second::Second()
Third::Third()
Порядок вызова деструкторов
Деструкторы для производных классов вызываются в порядке обратном вызову конструкторов.
Пример. Порядок вызова деструкторов
class First
{
public:
~First(){printf("Деструктор First\n");}
};
class Second: public First
{
public:
~Second(){printf("Деструктор Second\n");}
};
class Third: public Second
{
public:
~Third(){printf("Деструктор Third\n");}
};
int main() { Third t; return 0;
}
Деструкторы вызываются в следующем порядке:
Third::~Third()
Second::~Second()
First::~First()
Разрешение области видимости
Порождая один класс от другого, можно прийти к такой ситуации, когда в нескольких классах используются переменные и функции с одинаковыми именами.
Пример.
class A {public:
int fun() {return 1;}
};
class B : public A {public:
int fun() {return 2;}
};
int main()
{A a; B b;
int i = a.fun(); // i=1
int j=b.fun(); // j=2
}
Вэтом случае компилятор действует по следующему алгоритму: если имя в базовом классе переобъявляется в производном, то имя в производном классе подавляет соответствующее имя в базовом.
ВС++ можно заставить компилятор «видеть» за пределами текущей области видимости с помощью оператора разрешения видимости.
Общая форма этого оператора:
<имя класса>::<идентификатор из класса>
Пример 1. Обращение к методу базового класса из метода производного
class B : public A {public:
int fun() {return 2;}
int fun1() {return A::fun();}
};
Пример 2. Обращение к методу базового класса для объекта производного класса
B obj; printf("%d\n",obj.A::fun());