文章目录
- Note
Note
- 常量对象上可以执行常量成员函数,是因为常量成员函数确保不会修改任何非静态成员变量的值。
- 编译器如果发现常量成员函数内出现了有可能修改非静态成员变量的语句,就会报错。
- 因此,常置成员函数内部也不允许调用类的其他非常置成员函数(静态成员函数除外)。
- 在您可能犯这类错误时,IDE可能会提示您!
// program 12.5.1.cpp 常量成员函数
using namespace std;
class Sample
{
int a;
public:
Sample() : a(-1) {} // constructor;构造函数的括号初始化成员变量法即(a=-1)
/* 常量成员函数不允许修改成员变量;所有成员变量对于常量成员函数都是只读(而不可改写的) */
void GetValue() const; //常量成员函数声明
/*普通成员函数*/
void test();
/* testConst */
void testConst() const;
};
/* 常量成员函数 */
void Sample::GetValue() const
{
cout << "GetValue() const member function was called!@" << endl;
// a += 5;/* 所有成员变量对于常量成员函数都是只读(而不可改写的) */
cout << "obj.a=" << a << endl;
}
/*普通成员函数(not a const member function)*/
void Sample::test()
{
cout << "test() was called!" << endl;
cout << "obj.a=" << a << endl;
};
void Sample::testConst() const
{
// a += 5;//即使在常量成员函数中,您也不可以试图做修改操作,仅仅可以读取值,编译器会检查这一点(IDE也可以做出提示)
cout << "testConst() was called!" << endl;
cout << "obj.a=" << a << endl;
};
int main()
{
const Sample obj; //定义Sample的一个常量对象obj
obj.GetValue(); //常量对象上可以执行常量成员函数
// obj.test(); //常量对象拒绝普通成员函数的访问;expected error!
obj.testConst();
return 0;
}
/*常量对象上可以执行常量成员函数,是因为常量成员函数确保不会修改任何非静态成员变量的值。编译器如果发现常量成员函数内出现了有可能修改非静态成员变量的语句,就会报错。因此,常置成员函数内部也不允许调用同类的其他非常置成员函颤(静态成员函数除外)。*/