- •Лекция №4 указатель this. Инлайн-функции. Константные и статические данные и функции. Указатель this
- •Встраиваемые (inline) функции
- •Файл Dot.H
- •Статические данные-члены класса
- •Файл Dot.H
- •Файл Dot.Cpp
- •Файл Main.Cpp
- •В памяти существует 3 объекта типа Dot
- •Статические функции-члены класса
- •Константные данные-члены класса
- •Константные функции-члены класса
- •Константные объекты
Файл Dot.H
class Dot // класс точки
{
double x, y; // координаты точки
public: // открытые члены класса
• • •
// объявление и определение функций
inline double GetX(){return x;} // возвращает значение данного-члена х
inline double GetY(){return y;} // возвращает значение данного-члена y
// объявление функций
void SetX(double X); // устанавливает значение данного-члена х
void SetY(double Y); // устанавливает значение данного-члена y
};
// определение функций
inline void Dot::SetX(double X) {x=X;}
inline void Dot::SetY(double Y) {x=Y;}
Статические данные-члены класса
Члены класса могут быть объявлены с модификатором static. Статический член класса может рассматриваться как глобальная переменная или функция, доступная только в пределах класса.
Данное-член класса, определенное с модификатором static:
разделяется всеми представителями этого класса;
существует только один экземпляр этой переменной.
Память под статические данные-члены выделяется, даже если нет никаких представителей класса. Поэтому класс должен не только объявлять статические данные-члены, но и определять их.
К статическим данным-членам, объявленным в разделе public класса, рекомендуется обращаться с помощью следующей конструкции:
<имя_класса>::<данное_член>
Эта форма обращения отражает тот факт, что соответствующее данное-член является единственным для всего класса.
Если статические данные-члены объявлены как закрытые, то доступ к ним можно получить с помощью обычных функций-членов. Доступ к статическим данным-членам с помощью обычных функций-членов ничем не отличается от доступа к другим данным-членам, но для этого необходимо создать хотя бы один объект данного класса. В связи со сказанным выше, можно дать следующие рекомендации:
Применяйте статически данные-члены для совместного использования данных несколькими объектами класса;
Ограничьте доступ к статическим данным-членам, объявив их в разделе protected или private.
Рассмотрим пример использования статического данного-члена класса:
Файл Dot.H
class Dot // класс точки
{
static int count;// объявление статического данного-члена – счётчика объектов
public: // открытые члены класса
// конструктор увеличивает счётчик объектов на единицу
Dot (char Name) {name=Name; x=0; y=0; count++;}
~Dot() {count--;} // деструктор уменьшает счётчик объектов на единицу
void PrintCount(); // функция выводит количество существующих объектов
• • •
};
Файл Dot.Cpp
#include "Dot.h" // подключение заголовочного файла класса Dot
void Dot::PrintCount()
{
char S[30];
CharToOem("В памяти существует ", S);
cout<<S<<count;
CharToOem(" объекта типа Dot\n", S);
cout<<S;
}
Файл Main.Cpp
#include "Dot.h" // подключение заголовочного файла класса Dot
int Dot::count=0; // инициализация статического данного-члена
void main()
{
Dot A('A'), B('B'), C('C'); // вызов конструктора Dot ( char Name )
A.PrintCount();
cout<<Dot::count<<'\n'; // ошибка: данное-член count недоступен
}
В этом примере статическое данное-член count содержит количество существующих объектов. Инициализация данного-члена count осуществляется перед выполнением программы и созданием объектов в файле основной программы с помощью оператора: void Dot::PrintCount()
Обратите внимание, что обращение к этому члену класса в функции main() в операторе cout<<Dot::count<<'\n'; приводит к ошибке, поскольку данное-член класса count объявлено как закрытое и является недоступным за пределами класса.
При выполнении программа выводит на экран: