一、const成员函数,即常成员函数以及常对象:
常对象,实例化对象时在前面加上const即可。
常成员函数
形式:在函数形参括号后加上一个const。
class A
{
public:
A(int x, int y){this->x = x; this->y = y;}
~A(){}
A show()const{cout<<"x="<<x<<" y="<<y<<endl; return *this;} //常成员函数,在内部操作不会修改类中的数据成员
private:
int x;
int y;
};
作用:可以保证该成员函数的内部操作不会修改到类中的数据成员。
其中有几点需要注意:
1.const对象(常对象)只能访问const成员函数(常成员函数),而非const对象既可以访问其他成员函数,也能访问const成员函数。
2.常成员函数能与同名非常成员函数构成重载,当实例化常对象时后,调用该函数自动调用常成员函数,而非常对象则会调用非常成员函数。
2.常对象的成员是不可更改的。
3.const成员函数不可以修改对象的数据,不管对象是否具有const性质。
4.对于mutable修饰符的数据成员,const成员函数也能进行修改。
二、常指针与常引用:
对于一个对象,在初始化指针或引用该对象时前面加上const,即为对象的常指针与常引用
例子:
class A
{
public:
A(int x, int y){this->x = x; this->y = y;}
~A(){}
A show()const{cout<<"x="<<x<<" y="<<y<<endl; return *this;}
private:
int x;
int y;
};
int main(){
A a(3,4)
const A *b = &a; //指向对象a的常指针
const A &c = a; //对对象a的常引用
return 0;
}
与常对象一样,常指针与常引用,无法调用对象中的非常成员,但可以指向另外的对象。
但另一种写法的常指针是具有读写权限的:
A *const b = &a;
这种常指针可以访问对象中的非常成员,但不能指向另外一个对象。