【c++】类当中的const成员

                                                   const成员

一、const修饰类的成员函数

const修饰类的成员函数称为const成员函数,实际上是修饰该成员函数的隐含this指针,表明在该成员函数当中不能对类的任何成员进行修改。

说明一下什么是this指针,this指针是每个类的成员函数隐含的第一个参数,当一个对象调用这个成员函数的时候,this指针默认的指向调用它的那个对象。也就是说,在这个成员函数中不用调用即可使用它被包含的类中的成员。

void Display() const/* const Date *this */
	{
		cout << "Display () const" << endl;
		cout << "year:" << _year << endl;
		cout << "month:" << _month << endl;
		cout << "day:" << _day << endl << endl;
	}
	void Display(const Date * this)  
	{
		cout << "Display () const" << endl;
		cout << "year:" << this->_year << endl;
		cout << "month:" << this->_month << endl;
		cout << "day:" << this->_day << endl << endl;
	}

以上例子,是为了看清楚const是怎样修饰this指针的,接下来我们来看const的具体应用场景。

1、const对象可以调用const成员函数const对象不能调用非const成员函数

因为const对象的隐含的this指针是const (对象名)* this,而非const成员函数隐含的this指针是(对象名)* this,类型不匹配,同理const成员函数可以被调用。在这里强调一下,两个同名的成员函数,一个是const,一个非const,可以构成函数的重载。

2、非const对象可以调用const成员函数

因为成员函数能够隐式类型转换,将非const类型的this指针,转换成const类型的this指针。

3、const成员函数不能调用非const成员函数

因为const成员函数的this指针是const类型的,在隐式转换中不能将const类型转换成非const类型。同时看出一个规律,隐式类型转换中,低一级的关键字可以转换成高一级的关键字,反之,不可。

二、取地址及const取地址操作符重载

class Date
{ 
public :
 Date* operator&()
 {
 return this ;
 }
 
 const Date* operator&()const
 {
 return this ;
 }
private :
 int _year ; // 年
 int _month ; // 月
 int _day ; // 日
};

不同的是this指针和返回值都是const类型的。

发布了157 篇原创文章 · 获赞 98 · 访问量 3万+

猜你喜欢

转载自blog.csdn.net/weixin_43447989/article/details/100548283