- •Статические элементы класса
- •Эти поля существуют для всех объектов класса в единственном экземпляре, то есть не
- •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. Обращение к методу базового класса из метода производного
Статические элементы класса
Статические поля и методы объявляются с помощью модификатора static.
Их можно рассматривать как глобальные переменные или функции, доступные только в
пределах области класса.
Статические поля
Статические поля применяются для хранения данных, общих для всех объектов класса, например, количества объектов или ссылки на разделяемый всеми объектами ресурс.
Эти поля существуют для всех объектов класса в единственном экземпляре, то есть не дублируются.
Свойства статических полей:
1. Память под статическое поле выделяется один раз при его инициализации независимо от числа созданных объектов (и даже при их отсутствии) и инициализируется с помощью операции доступа к области действия, а не операции выбора (определение должно быть записано вне функций).
#include <stdio.h> class Example {public:
static int value;
}; Пример инициализации по умолчанию (0):
int Example::value;
Пример инициализации произвольным
значением:
// int Example::value=10;
2. Статические поля доступны как через имя класса, так и через имя объекта.
Example object1, *object2;
…
printf(“%d %d %d”, Example::value, object1.value, object2->value);
3. На статические поля распространяется действие спецификаторов доступа, поэтому статические поля, описанные как private, нельзя изменить с помощью операции доступа к области действия; это можно сделать только с помощью статических методов.
4. Память, занимаемая статическим полем, не учитывается при определении размера с помощью операции sizeof.
Статические методы
Статическая функция класса может обращаться только к статическим полям класса и вызывать только другие статические методы классы, так как им не передается скрытый указатель this.
Статические функции вызывается или через имя класса, или через имя объекта.
Пример описания и использования статических функций.
class Simple {public:
static int sum(int v1, int v2) {return v2+v1;}
};
int main()
{
printf(“%d\n”,Simple::sum(10,20); Simple s1; printf(“%d\n”,s1.sum(10,20); return 0;
}
Функции и объекты, объявляемые с декларацией const
Константный объект – это объект, значения полей которого изменять запрещено.
К нему должны применяться только константные методы.
Константный метод:
-объявляется с ключевым словом const после списка параметров;
-не может изменять значения полей;
-может вызывать только константные методы;
-может вызываться для любых (не только константных объектов).
Рекомендуется описывать как константные только те методы, которые предназначены для получения значений полей.
Пример класса с константными методами.
class point
{
double x,y; public:
…
void PutPoint (double xVal, double yVal) { x=xVal; y=yVal; };
double GetX() const {return x;} double GetY() const {return y;}
…
};
Пример использования константных и неконстантных методов константными и неконстантными объектами
//неконстантный объект point p10; p10.PutPoint(10,20);
printf(“%d %d\n”, p10.GetX(),p10.GetY());
//константный объект const point p11(10,10);
printf(“%d %d\n”, p11.GetX(),p11.GetY()); p11.PutPoint(79,67); //Ошибка!!!