Этот сайт использует cookies. Продолжение работы с сайтом означает, что Вы согласны!
Создание констант внутри класса
Создать константу внутри класса можно несколькими способами:
- объявив статическую константу. Статическая константа существует в единственном экземпляре, поэтому это лучший способ. Присваивание значения статической константе внутри класса допускается только для типов
int
,long
,long long
,short
,bool
,char
иwchar_t
: static const int B = 20;
Статические константы остальных типов необходимо дополнительно определять вне класса или вместо ключевого слова const
использовать ключевое слово constexpr
:
static constexpr double E2 = 1.3;
- объявив обычную константу. Присвоить значение обычной константе допускается только в списке инициализации конструктора. Список указывается после двоеточия между списком параметров и телом конструктора. Пример:
const int F;
const double G;
C(): F(50), G(15.3) { } // Конструктор
Значение обычной константы может отличаться у разных экземпляров класса, если при инициализации указана переменная, которая передается в параметре конструктора. Пример:
const int F; // Может иметь разные значения
const double G;
C(int i): F(i), G(15.3) {} // Конструктор
Если значение константы должно быть одинаковым для всех экземпляров класса, то вместо обычных констант следует использовать статические константы. Это позволит более экономично использовать память и компилятор сможет произвести оптимизацию программы;
- объявив константу внутри анонимного перечисления. Таким способом можно создать только целочисленную константу.
Присвоить значение константе можно только один раз. Любая попытка повторного присваивания ей значения приведет к ошибке. Различные варианты создания константы и способы доступа к ним вне класса приведены в листинге 13.13.
Листинг 13.13. Создание констант внутри класса
#include <iostream>
class C {
public:
// Константы внутри перечисления
enum : int { A = 10 };
// Инициализировать внутри класса можно только статические
// константы типа int, long, long long, short, bool, char и wchar_t
static const int B = 20;
static const int D; // Определение вне класса
static const double E; // Определение вне класса
static constexpr double E2 = 1.3;
// Присваивание значения константе в конструкторе
const int F;
const double G;
C(int i): F(i), G(15.3) {} // Конструктор
};
const int C::D = 30;
const double C::E = 40.3;
int main() {
C obj(50);
// Обратиться можно и без создания экземпляра класса
std::cout << C::A << std::endl; // 10
std::cout << obj.A << std::endl; // 10
std::cout << C::B << std::endl; // 20
std::cout << obj.B << std::endl; // 20
std::cout << C::D << std::endl; // 30
std::cout << obj.D << std::endl; // 30
std::cout << C::E << std::endl; // 40.3
std::cout << obj.E << std::endl; // 40.3
std::cout << C::E2 << std::endl; // 1.3
std::cout << obj.E2 << std::endl; // 1.3
// Обращение только через экземпляр
std::cout << obj.F << std::endl; // 50
std::cout << obj.G << std::endl; // 15.3
C obj2(70);
std::cout << obj2.F << std::endl; // 70
return 0;
}
Помощь сайту
ЮMoney (Yandex-деньги): 410011140483022
ПАО Сбербанк:
Счет: 40817810855006152256
Реквизиты банка:
Наименование: СЕВЕРО-ЗАПАДНЫЙ БАНК ПАО СБЕРБАНК
Корреспондентский счет: 30101810500000000653
БИК: 044030653
КПП: 784243001
ОКПО: 09171401
ОКОНХ: 96130
Скриншот реквизитов