Вам бонус- начислено 1 монета за дневную активность. Сейчас у вас 1 монета

1.4.4. Статические члены класса

Лекция



Привет, сегодня поговорим про статические члены класса, обещаю рассказать все что знаю. Для того чтобы лучше понимать что такое статические члены класса , настоятельно рекомендую прочитать все из категории С++ (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)

Из статьи мы узнали кратко, но содержательно про статические члены класса
создано: 2015-12-20
обновлено: 2021-03-13
132393



Рейтиг 9 of 10. count vote: 2
Вы довольны ?:


Найди готовое или заработай

С нашими удобными сервисами без комиссии*

Как это работает? | Узнать цену?

Найти исполнителя
$0 / весь год.
  • У вас есть задание, но нет времени его делать
  • Вы хотите найти профессионала для выплнения задания
  • Возможно примерение функции гаранта на сделку
  • Приорететная поддержка
  • идеально подходит для студентов, у которых нет времени для решения заданий
Готовое решение
$0 / весь год.
  • Вы можите продать(исполнителем) или купить(заказчиком) готовое решение
  • Вам предоставят готовое решение
  • Будет предоставлено в минимальные сроки т.к. задание уже готовое
  • Вы получите базовую гарантию 8 дней
  • Вы можете заработать на материалах
  • подходит как для студентов так и для преподавателей
Я исполнитель
$0 / весь год.
  • Вы профессионал своего дела
  • У вас есть опыт и желание зарабатывать
  • Вы хотите помочь в решении задач или написании работ
  • Возможно примерение функции гаранта на сделку
  • подходит для опытных студентов так и для преподавателей



Комментарии


Оставить комментарий
Если у вас есть какое-либо предложение, идея, благодарность или комментарий, не стесняйтесь писать. Мы очень ценим отзывы и рады услышать ваше мнение.
To reply

С++ (C plus plus)

Термины: С++ (C plus plus)