目录
1.常量对象
在定义该对象的时候在前面加const关键字
class A
{
public:
int x,y;
A(int m,int n):x(m),y(n)
{
;
}
void show()
{
cout<<x<<" "<<y;
}
} ;
const A a;//a是常量对象
2.常量成员函数
(1)在类的成员函数说明后面加const关键字,则使成员函数变成常量函数
void show2() const{cout<<x<<" "<<y<<endl;}
(2)常量成员函数执行期间不应修改其所作用的对象。因此,在常量成员函数中不能修改成员变量 的值(静态成员变量除外),也不能调用同类的非常量成员函数(静态成员函数初外)
class A{
public:
int x,y;
A(int m,int n)
{
x=m;y=n;
}
void show1()
{
cout<<x<<" "<<y<<endl;
}
void show2() const
};
void show2() const
{
x=0;错误,常量成员函数执行期间不应修改其所作用的对象,但是此处修改了其所作用的对象的成员变量的值
show1();错误, 常量成员函数内部不能调用非常量的成员函数,因为非常量的成员函数在执行过程中,有可能修改它所作用
的对象的值
}
int main()
{
const A a;定义了一个常量对象a
a.x=12;错误,因为常量对象不可以被修改
a.show1();错误,常量对象上面不能执行非常量成员函数,因为非常量成员函数在执行过程中有可能修改调a的值
a.show2();正确,常量对象上面可以执行常量成员函数
return 0;
}
3.常数据成员
常数据成员是不能改变的,只能通过构造函数的参数列表对常数据成员进行初始化
正确的方式:
class A
{
public:
const int x,y;
A(int m,int n):x(m),y(n){}
} ;
错误方式:
class A
{
public:
const int x,y;
A(int m,int n)
{
x=m;
y=n;
}
} ;
4.常引用
首先回顾之前所学:
类型名&引用名=某变量名;
int n=4;
int & r=n; r引用了n,并且r的类型是int &
某个变量的引用,等价于这个变量,相当于该变量的一个别名
可以用对象的引用作为参数,如:
class A
{
};
void printf(A & o)//此时o这个参数不是对象,所有o不会引发复制构造函数的调用
{
}
但是对象引用作为函数的参数有一定的风险性,若函数中不小心修改了形参o,则实参也跟着改变,这可能不是我们想要的,
所有如何避免?
改变的代码如下:
class A
{
} ;
void printf(const A & o)
{
}
这样函数中就能确保不会出现无意中更改o的值的语句了