Использование и инициализация постоянных членов данных
Мы уже знаем понятие константы, когда изучаем язык C. Ключевое слово — const . Так называемая «константа», или переменная, измененная с помощью «constant», не может быть изменена. Например, переменная, измененная с помощью const, становится константной переменной. это значение не может быть изменено.
Ну, в C++ также есть концепция константы. Дополнительное отличие состоит в том, что помимо преобразования общих переменных в константные переменные, const также можно использовать для изменения объекта и превращения его в постоянный объект. А члены данных и функции-члены, которые могут изменять класс, называются постоянными членами данных и постоянными функциями-членами класса соответственно.
Далее мы последовательно объясним константные элементы данных , константные функции-члены и константные объекты .
1. Постоянные элементы данных:
Использование постоянных членов данных такое же, как и в языке C, за исключением того, что эта часть данных отображается в классе, а используемый формат следующий:
Тип данных const имя элемента данных;
или
имя элемента данных константного типа данных;
Члены, измененные с помощью const, должны быть инициализированы и не могут быть изменены, а метод инициализации выполняется в списке инициализации конструктора класса.
Кроме того, существует особый случай, если член является статическим типом, то есть статическим постоянным элементом данных , поскольку это статический атрибут, инициализацию необходимо инициализировать вне класса. Давайте поместим только что упомянутую ситуацию в код, чтобы проиллюстрировать:
#include<iostream>usingnamespacestd;classClock{private:constinth;//Изменить h как член константного типа constintm;//Изменить m как член константного типа intconsts;//Могут использоваться оба вышеуказанных варианта использования staticconstintx;public:Clock (inta, intb,intc):h(a),m(b),s(c){cout<<Constrctor!Called<<endl;}intShowTime(){cout<<h<<:<<m<< :<< s<<endl;return0;}intGetX(){cout<<x<<endl;return0;}};constintClock::x=99;intmain(){ClockA(12,10,30);A. ShowTime() ;A.GetX();return0;}
Запустите демонстрационные результаты:
Обратите внимание на четыре константных элемента данных в классе. Среди них X является статическим типом. Из-за его особых статических свойств его необходимо инициализировать вне класса, даже если X является частным типом.
2. Постоянные объекты:
В C++ объект может быть объявлен как константный тип, то есть постоянный объект. После этого объявления объект не может быть изменен в течение всего жизненного цикла, поэтому он должен быть инициализирован конструктором при определении. Формат определения следующий:
Введите имя константного объекта;
или
имя объекта константного типа;
Следует отметить, что константные объекты не могут получать доступ к функциям, не являющимся членами класса, а могут обращаться только к постоянным функциям-членам (часть 3 ниже). Давайте посмотрим на пример ниже:
#include<iostream>usingnamespacestd;classClock{private:constinth;//Измените h, чтобы он был членом постоянного типа constintm;//Измените m, чтобы он был членом постоянного типа intconsts;//Возможны оба вышеуказанных варианта использования intx;public: Clock(inta, intb,intc):h(a),m(b),s(c){x=99;cout<<Constrctor!Called<<endl;}intShowTime(){cout<<h<<: <<m< <:<<s<<endl;return0;}intGetX()const{//x=99;cout<<x<<endl;return0;}};intmain(){constClockA(12,10, 30);constClockB (14,20,50);//A=B;//A.ShowTime();A.GetX();return0;}
Обратите внимание на инструкции в строках 39 и 40 кода. Обычная компиляция сообщит об ошибке, поскольку A является постоянным объектом и ему не может быть присвоено значение, а функция ShowTime не является функцией-членом. Можно выполнить 41 строку кода, и эффект будет следующим:
3. Постоянные функции-члены:
Аналогично, после того как функция-член класса изменяется с помощью const, она становится постоянной функцией-членом. Определение постоянной функции-члена выглядит следующим образом:
Тип возвращаемого значения: имя функции (столбец списка параметров) const;
Необходимо обратить внимание на:
(1) Определение и объявление константных функций-членов должно содержать const;
(2) Постоянные функции-члены могут вызывать только постоянные функции-члены, но не могут вызывать чрезвычайные функции-члены, а также не могут получать доступ к чрезвычайным переменным-членам, но не могут их изменять.
Например, следующий код:
#include<iostream>usingnamespacestd;classClock{private:constinth;//Измените h, чтобы он был членом постоянного типа constintm;//Измените m, чтобы он был членом постоянного типа intconsts;//Возможны оба вышеуказанных варианта использования intx;public: Clock(inta, intb,intc):h(a),m(b),s(c){x=99;cout<<Constrctor!Called<<endl;}intShowTime(){cout<<h<<: <<m< <:<<s<<endl;return0;}intGetX()const{//x=99;cout<<x<<endl;return0;}};intmain(){constClockA(12,10, 30);A .GetX();return0;}
Обратите внимание на 29-ю и 30-ю строки кода. Если вы используете 29-ю строку кода, будет сообщено об ошибке компиляции. Фактический результат работы следующий:
Установление понятия констант в С++ уточняет границы между изменением и неизменяемостью каждого объекта программы, а также повышает безопасность и управляемость программ на С++.
Пожалуйста, попробуйте это самостоятельно.