Лекция
Привет, сегодня поговорим про статические члены класса, обещаю рассказать все что знаю. Для того чтобы лучше понимать что такое статические члены класса , настоятельно рекомендую прочитать все из категории С++ (C plus plus).
Каждый объект одного и того же класса имеет собственную копию данных класса. Это не всегда соответствует требованиям решаемой задачи. Например, счетчик объектов, указатели на первый и последний объект в списке объектов одного класса или наценка в классе goods в примере 1.1.3. Эти данные должны быть компонентами класса, но иметь их нужно только в единственном числе. Такие компоненты должны быть определены в классе как статические (static). Статические данные классов не дублируются при создании объектов, т.е. каждый статический компонент существует в единственном экземпляре. Доступ к статическому компоненту возможен только после его инициализации. Для инициализации используется конструкция
тип имя_класса : : имя_данного инициализатор;
Например,
int goods : : percent = 12;
Это предложение должно быть размещено в глобальной области после определения класса. Только при инициализации статическое данное класса получает память и становится доступным. Обращаться к статическому данному класса можно обычным образом через имя объекта
имя_объекта.имя_компонента
Но к статическим компонентам можно обращаться и тогда, когда объект класса еще не существует. Доступ к статическим компонентам возможен не только через имя объекта, но и через имя класса
имя_класса : : имя_компонента
Однако так можно обращаться только к public компонентам.А как обратиться кprivate статической компоненте извне определения объекта? С помощью компонента-функции этого класса. Однако при вызове такой функции необходимо указывать имя объекта, а объект может еще не существовать. Эту проблему решаютстатические компоненты-функции. Об этом говорит сайт https://intellect.icu . Эти функции можно вызвать через имя класса.
имя_класса : : имя_статической_функции
Пример 1.4.1
#include <iostream.h>
class TPoint
{
double x,y;
static int N; // статический компонент- данное : количество точек
public:
// конструктор
TPoint(double x1 = 0.0,double y1 = 0.0){N++; x = x1; y = y1;}
static int& count(){return N;} // статический компонент-функция
};
int TPoint : : N = 0; //инициализация статического компонента-данного
void main(void)
{TPoint A(1.0,2.0);
TPoint B(4.0,5.0);
TPoint C(7.0,8.0);
cout<<“\nОпределены ”<<TPoint : : count()<<“точки.”;
}
Пример 1.4.2
// Моделирование списка.
class list
{int x; //информационное поле
list *next; //указатель на следующий элемент
static list *begin; // начало списка
public:
list(int x1);
~list();
add(); //объект добавляет себя в список
static show(); //статическая функция для просмотра списка
};
list * list : : begin = NULL;
void main()
{list* p;
p=new list(5); p->add(); // создаем первый объект и добавляем его в список
p=new list(8); p->add(); // создаем второй объект и добавляем его в список
p=new list(35); p->add(); // создаем третий объект и добавляем его в список
list::show(); // показываем весь список
}
Пример 1.4.3
//Другая реализация класса goods- смотри пример 1.1.3.
#include <iostream.h>
// Класс “товары”
class goods
{char name[40];
float price;
static int percent; // наценка
public:
void Input(){cout<<“наименование: ”;
cin>>name;
cout<<“цена: ”;
cin>>price;}
void print(){cout<<“\n”<<name;
cout<<“, цена: ”;
cout<<long(price*(1.0+goods : : percent*0.01));}
};
int goods : : percent = 12;
void main(void)
{
goods wares[5];
int k = 5;
for(int i = 0; i < k; i++) wares[i].Input();
cout<<“\nСписок товаров при наценке ”<<wares[0].percent<<“ % ”;
for(i = 0; i < k; i++) wares[i].print();
goods : : percent = 10;
cout<<“\nСписок товаров при наценке ”<<goods : : percent<<” % ”;
goods *pGoods = wares;
for(i = 0; i < k; i++) pGoods++–>print();
}
В общем, мой друг ты одолел чтение этой статьи об статические члены класса. Работы впереди у тебя будет много. Смело пиши комментарии, развивайся и счастье окажется в твоих руках. Надеюсь, что теперь ты понял что такое статические члены класса и для чего все это нужно, а если не понял, или есть замечания, то не стесняйся, пиши или спрашивай в комментариях, с удовольствием отвечу. Для того чтобы глубже понять настоятельно рекомендую изучить всю информацию из категории С++ (C plus plus)
Из статьи мы узнали кратко, но содержательно про статические члены класса
Комментарии
Оставить комментарий
С++ (C plus plus)
Термины: С++ (C plus plus)