显然const 是可以修饰const成员变量、const成员函数和const对象的,当const 关键字用于这三者,有如下特性:
const成员变量 为只读变量,只能通过初始化列表初始化const成员函数 不能直接改写成员变量的值,并且只能调用const成员函数 const对象 为只读对象,只能调用const成员函数 ,非const对象 也可以调用const成员函数
#include "iostream"
using namespace std;
class Cplus
{
private:
const int m_number;
public:
int m_value;
Cplus():m_number(0)
{
m_value = 0;
}
~Cplus() {}
void set(int i)
{
int *p = const_cast<int*>(&m_number);
*p = i;
}
void print()
{
cout << "m_number = " << m_number << endl;
}
int get_number() const
{
cout << "m_value = " << m_value << endl;
return m_number;
}
};
int main()
{
Cplus c1;
c1.print();
c1.set(5);
c1.print();
cout << c1.get_number() << endl;
cout << "-----------------" << endl;
const Cplus c2;
cout << c2.get_number() << endl;
*const_cast<int*>(&c2.m_value) = 3;
c2.get_number();
return 0;
}
运行结果
m_number = 0
m_number = 5 //m_number是const成员变量,这里被改变了,说明const成员变量是只读变量不是常量
m_value = 0 //说明普通对象也可以调用cosnt成员函数
5
-----------------
m_value = 0 //const对象调用const成员函数
0 //const对象可被间接修改,是只读对象
m_value = 3
参考
狄泰软件学院 - C++深度解析教程 - 第20课、24课
|