常对象:它的数据成员在整个的对象的生存期内不能改变。常对象必须进行初始化,而且不能被被新。
声明 常对象的语法形式为:
const 类型说明符 对象名;
用const 修饰的类成员
1.常成员函数
类型说明符 函数名(参数表)const;
void print();
void print() const;
以上两个是对print()函数的重载。
注:
(1)const 是函数类型的一个组成部分,因此在函数定义部分也要带const关键字
(2)常对象只能调用常成员函数
(3)常成员函数不能改变目的对象的数据成员的值
#include<iostream>
using namespace std;
class A{
int i;
public:
A(int x):i(x){}
void print() const;
};
void A::print() const {
i+=1; //删去此语句,程序将能运行成功
cout<<"i="<<i<<endl;
}
int main()
{
A a(2);
a.print(); //在调用常成员函数时,暂时将此对象视为常对象!!! a对象调用的
return 0;
}
以上程序运行错误,错误为在为常成员函数定义时,改变了对象a的数据成员i的值
2.常数据 比较 const int i;static const int q; static int w ;
const int i;需要通过初始化列表来获得初值,此值直到程序结束之前,不能对它进行更新
static int w;可以直接赋值 利用 类型说明符 类名::w=? 来赋值,可以对它进行更新,但不会产生副本
static const int q;可以直接利用 const int 类名::q=?来赋值,不可以对它进行更新,也不会产生副本
3.常引用 形参变为常引用 ,引用的对象的数据不能被更新
例子:
class A
func(const A & a) a中的数据成员不能改变,不能调用此函数的非const成员函数