一、this指针
每个成员函数(除static成员函数外)都有一个隐含的形参this指针,this指针指向所调用的对象。例如函数add_year可以这样写:
void Date::add_year(int n)
{
this->y += n;
}
在成员函数中,不必显示的使用this指针来访问对象所属的成员。
二、const成员函数
理解了this指针之后,就可以理解有的成员函数后面跟上const关键字的含义了,例如:
class Date {
int d, m, y;
public:
int day() const;
int month() const;
int year() const;
};
inline int Date::year() const
{
return y++; // 错误:不能修改成员变量值
}
inline int Date::year() const
{
return y;
}
inline int Date::year() // 错误:缺少const
{
return y;
}
const成员函数必须在定义和声明后面都加上const关键字,否则会出现编译错误。
每个成员函数(除static成员函数外)都有一个隐含的形参this指针,this指针指向所调用的对象。例如函数add_year可以这样写:
void Date::add_year(int n)
{
this->y += n;
}
在成员函数中,不必显示的使用this指针来访问对象所属的成员。
二、const成员函数
理解了this指针之后,就可以理解有的成员函数后面跟上const关键字的含义了,例如:
class Date {
int d, m, y;
public:
int day() const;
int month() const;
int year() const;
};
inline int Date::year() const
{
return y++; // 错误:不能修改成员变量值
}
inline int Date::year() const
{
return y;
}
inline int Date::year() // 错误:缺少const
{
return y;
}
const成员函数必须在定义和声明后面都加上const关键字,否则会出现编译错误。
在函数后面加上const关键字,表明this是指向const对象的指针,所以在该成员函数里面不能对该对象做任何修改,并且只能调用const成员函数,不能调用非const成员函数。而对于非const成员函数即可以调用非const成员函数,也可以调用const成员函数。const对象和非const对象都可以调用const成员函数,非const成员函数只能被非const对象调用。例如:
void f(Date& d, const Date& cd)
{
int i = d.year(); // ok
d.add_year(1); // ok
int j = cd.year(); // ok
cd.add_year(1); // 错误:不能修改const cd的值
}