1. 常数据成员
const 修饰类的成员变量,表示成员常量,不能被修改,同时它只能在初始化列表中赋值(c11 中支持类中实始化)。可被 const 和非 const 成员函数调用,而不可以修改。
class A
{
public:
A():iValue(199)
{}
private:
const int iValue;
};
2. 常成员函数
2.1 const修饰函数的意义
承诺在本函数内部不会修改类内的数据成员,不会调用其它非 const 成员函数。
2.2 const修饰函数位置
void dis() const
{}
2.3 const构成函数重载
#include <iostream>
using namespace std;
class A
{
public:
A():x(199),y(299)
{}
void dis() const //const 对象调用时,优先调用
{
//input(); 不能调用 非 const 函数,因为本函数不会修改,无法保证所调的函数也不会修改
cout<<"x "<<x<<endl;
cout<<"y "<<y<<endl;
//y =200; const 修饰函数表示承诺不对数据成员修改。
}
void dis() //此时构成重载,非 const 对象时,优先调用。
{
y = 200;
input();
cout<<"x "<<x<<endl;
cout<<"y "<<y<<endl;
}
void input()
{
cin>>y;
}
private:
const int x;
int y;
};
int main()
{
A a;
a.dis();
// const A a;
// a.dis();
return 0;
}
输入123
2.3 小结
1,如果 const 构成函数重载,const 对象只能调用 const 函数,非 const 对象优先调用非 const 函数。
2,const 函数只能调用 const 函数。非 const 函数可以调用 const 函数。
3,类体外定义的 const 成员函数,在定义和声明处都需要 const 修饰符
3. 常对象
const A a;
a.dis();
3.1 小结
1,const 对象,只能调用 const 成员函数。
2,可访问 const 或非 const 数据成员,不能修改。