C语言:
const只能修饰变量
C++:
const修饰全局或者局部变量
const修饰成员变量
const修饰成员函数
将const修饰的“成员函数”称之为const成员函数
const修饰类成员函数,实际修饰该成员函数隐含的this指针,表明在该成员函数中不能对类的任何成员进行修改。 特性:不能修改“成员变量”
扩展:this的类型: Date* const ---->this的指向不能修改,this指向空间的值可修改
注意:如果成员函数内部一定不会修改成员变量,最后将该成员函数设置为const成员函数
普通成员函数:没有被const修饰的成员函数
思考 1. const对象可以调用非const成员函数吗?
不可以 2. 非const对象可以调用const成员函数吗?
可以 3. const成员函数内可以调用其它的非const成员函数吗?
不可以 4. 非const成员函数内可以调用其它的const成员函数吗?
可以
注:const成员函数只能调用const成员函数
如果在const成员函数中,一定要修改某个成员变量时,在定义改成员变量的时候,使用mutable关键字修饰该成员即可
void fun()const
{
month +=1;
day+=1;
}
private:
int year;
int month;
mutable int day;
fun( ) 方法中 month会报错,而day不会
取地址及const取地址操作符重载
要时刻注意const的成员函数在调用方法时,不能调用普通方法
注:代码并未全部给出,此处仅为了解取地址及const取地址操作符重载
class Date
{
public :
Date* operator&()
{
cout<<this<<endl;
return this ;
}
const Date* operator&()const
{
cout<<this<<endl;
return this ;
}
private :
int _year ; // 年
int _month ; // 月
int _day ; // 日
}
int main()
{
Date d1(); //此处构造函数没有给出
Date* p = &d1;
//在对象去地址的同时并打印地址
const Date d2(d1);//拷贝构造
const Date*p2 = %d2;
return 0;
}
此处构成重载的原因是因为两个this的类型不同 分别是 Date* const 和 const Date* const
注意:在参数列表中不能加任何参数,否则编译器会将&当成按位&来处理
