常数据成员
定义:const 数据类型 数据成员名;
初始化:
方法1:构造函数初始化列表
方法2:类内直接初始化(C++11后)
访问方式:
使用对象名.常数据成员名访问数据成员。
作用:
使用关键字const修饰,表示其数值在对象创建后不能被修改。
常成员函数
定义:函数类型 常成员函数名(参数) const;
访问方式:
对象.常成员函数名(参数);
对象指针->常成员函数名(参数);
注意:
1.在类的定义和声明处都需要将常成员函数标识为const。
2.常成员函数被声明为不会修改类对象的状态。因此,在常成员函数的方法体中,不能修改任何非静态成员变量,并且不能调用其他非常成员函数,除非这些成员函数也被声明为常成员函数。
class MyClass { private: static int staticVar; // 静态成员变量 int myVar; public: MyClass(int num) : myVar(num) {} int getMyVar() const { // 常成员函数 // myVar = 10; // 错误,常成员函数不允许修改非静态成员变量 return myVar; } void nonConstFunc() { std::cout << "Non-const member function" << std::endl; } void constFunc() const { std::cout << "Const member function" << std::endl; } }; int MyClass::staticVar = 0; // 静态成员变量初始化 int main() { const MyClass obj(5); // 声明一个常对象 std::cout << obj.getMyVar() << std::endl; // 输出:5 obj.constFunc(); // 调用常成员函数,输出:Const member function // obj.nonConstFunc(); // 错误,常对象无法调用非常成员函数 MyClass::staticVar = 10; // 可以修改静态成员变量 return 0; }
3.如果某个成员变量被声明为volatile或者mutable,那么即使在常成员函数中,仍然可以修改这些特殊修饰的成员变量。
常对象
定义: const 类名 对象名称
初始化:常对象在创建时必须进行初始化,因为它们的值在创建后不能被修改。
限制:常对象的成员变量不能被修改,非常成员函数不能被调用。
例:
class MyClass { public: int myVariable; void modify() { // 非常成员函数 myVariable = 5; // 可以修改非常成员变量 } void display() const { // 声明为常成员函数 cout << myVariable; } }; int main() { const MyClass obj; // 声明常对象 obj.myVariable = 10; // 错误!常对象的成员变量不能修改 obj.modify(); // 错误!常对象的非常成员函数不能调用 obj.display(); // 正确!可以调用常成员函数 return 0; }