Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
лекции / Лекция 3-4n.docx
Скачиваний:
0
Добавлен:
11.02.2026
Размер:
74.69 Кб
Скачать

Int main () {

Anything anything;

anything.getValue () = "Hello!"; // вызывается неконстантный

// getValue ()

const Anything anything2;

anything2.getValue(); // вызывается константный getValue ()

return 0;

}

Перегрузка метода и разделение его на константную и неконстантную версии обычно выполняется, когда возвращаемое значение должно отличаться по константности (когда требуется константа, и когда она не требуется).

В примере, приведенном выше, неконстантная версия getValue () будет работать только с неконстантными объектами, но эта версия более гибкая, так как мы можем использовать её как для чтения, так и для записи m_value (что мы, собственно, и делаем, присваивая строку Hello!).

Но, когда мы не изменяем данные объекта класса, тогда вызывается константная версия getValue ().

Заключение

Любой метод, который не изменяет данные объекта класса, должен быть const!

Статические переменные-члены класса

   Рассмотрим использование статических переменных-членов класса в языке С++.

Статические переменные-члены класса

Мы знаем, что статические переменные сохраняют свои значения и не уничтожаются даже после выхода из блока, в котором они объявлены, например:

#include <iostream>

Int generateId () {

static int s_id = 0;

return ++s_id;

}

Int main () {

std::cout << generateID () << '\n';

std::cout << generateID () << '\n';

std::cout << generateID () << '\n';

return 0;

}

Результат выполнения программы:

1

2

3

Обратите внимание, s_id сохраняет свое значение после каждого вызова функции generateID ().

Ключевое слово static имеет другое значение, когда речь идет о глобальных переменных — оно предоставляет им внутреннюю связь (что ограничивает их видимость/использование за пределами файла, в котором они определены).

Поскольку использование глобальных переменных — это зло, то ключевое слово static в этом контексте используется не очень часто.

В языке C++ ключевое слово static можно использовать в классах: статические переменные-члены и статические методы.

Прежде чем мы перейдем к ключевому слову static с переменными-членами класса, давайте сначала рассмотрим следующий класс:

#include <iostream>

class Anything {

public:

int m_value = 3;

};

Int main () {

Anything first;

Anything second;

first.m_value = 4;

std::cout << first.m_value << '\n';

std::cout << second.m_value << '\n';

return 0;

}

При создании объекта класса, каждый объект получает свою собственную копию всех переменных-членов класса.

В этом случае, поскольку мы объявили два объекта класса Anything, у нас будет две копии m_value: first.m_value и second.m_value.

Это разные значения, следовательно, результат выполнения программы:

4 3

Переменные-члены класса можно сделать статическими, используя ключевое слово static. В отличие от обычных переменных-членов, статические переменные-члены являются общими для всех объектов класса. Рассмотрим следующую программу:

#include <iostream>

class Anything {

public:

static int s_value;

};

int Anything::s_value = 3;