一、概念
将const修饰的类成员函数称之为const成员函数。const修饰类成员函数,实际修饰该成员函数隐含的 this 指针,表明在该成员函数中不能对类的任何成员进行修改。
二、 const 成员函数
(1)const 类成员函数中不能修改类的成员变量,const 修饰的是 this 指针指向空间的内容
class Date
{
public:
void GetDay(void);
private:
int m_year;
int m_month;
int m_day;
};
void GetDay(void) const
{
return m_day;
}
(2)mutable 关键字
class Date
{
public:
void GetDay(void);
private:
mutable int m_year;
int m_month;
int m_day;
};
void GetDay(void) const
{
m_year = 2018;
return m_day;
}
三、取地址及const取地址操作符重载
这两个函数一般不用重新定义 ,编译器默认生成
class Date
{
public:
Date* operator&();
const Date* Date::operator&() const
private:
int m_year;
int m_month;
int m_day;
};
Date* Date::operator&()
{
return this ;
}
const Date* Date::operator&() const
{
return this ;
}
四、几个常见的问题
(1)const对象可以调用非const成员函数吗?
(2)非const对象可以调用const成员函数吗?
(3)const成员函数内可以调用其它的非const成员函数吗?
(4)非const成员函数内可以调用其它的const成员函数吗
| 普通类型的成员函数 | const 类型的成员函数 |
普通对象 | 可以调用 | 可以调用 |
const 对象 | 不可以调用 | 可以调用 |
普通类型的成员函数 | 可以调用 | 可以调用 |
const 类型的成员函数 | 不可以调用 | 可以调用 |