this指针和const成员函数

const对象只能调用const成员函数

this指针

类的成员函数都有一个隐式的this指针来指向调用该函数的那个类对象,this总是指向这个对象,所以this指针是个指针常量,属于顶层const

可以通过*this来返回对象。

以下是一个结构体类型(C++中的结构体可以有成员函数)

1
2
3
4
5
6
7
8
9
10
11
12
13
14
struct INT {
INT() = default;
INT(int n):m_val(n){}
INT& add(INT& n)
{
this->m_val = this->m_val + n.m_val;
return *this; //返回调用该函数的对象
}
void show() const //const成员函数
{
cout << "this value is :" << this->m_val << endl;
}
int m_val;
};

const成员函数

默认情况下this指针是INT * const类型,是指向非常量的指针常量(可以通过指针改变对象值,但不能改变指针指向),它是不可以指向常量对象,所以const类型的类对象不能调用普通的成员函数

这个时候就需要const成员函数出马了。const成员函数的形式是在参数列表的括号后面加上一个const关键字,如上图中的show()函数

1
void show() const;

const修改this指针的类型,使之变成const INT* const,即指向常量的指针常量所以const对象只能调用const成员函数


本博客所有文章除特别声明外,均采用 CC BY-SA 4.0 协议 ,转载请注明出处!