C++类之this指针
隐含的this指针
在前几节讲过,C++类的成员函数中,附加有一个隐含的this指针形参(代码在编译时由编译器自动添加到类中),this指向类类型对象的一个指针。与调用成员函数的对象绑定一起。类的成员函数不能定义this形参,只能由编译器自动添加。但是用户可以在成员函数中显式使用this指针,但是也不是一定要这样做,因为如果对类成员的引用没有限定的话,编译器会将这种引用处理成通过对this指针的引用。如:
//设计了一个类Person,拥有一个接口返回Person的名字 class Person{ public: Person(); private: string name; protected: int age; public: string getName() const; }; string Person::getName() const{ //在类中使用类成员 return name; //等价于下面这句 return this->name; } Person::Person():name("Josin"), age(22){ }
何时使用this指针
尽管我们在成员函数内部显式引用this是不必要的,但是有一种情况下必须这样做:当我们需要将类对象作为一个整体引用的时候。如:当我们需要将类对象返回的时候。
Person Person::getAge() const{ std::cout << age << " "; return *this; }
然后我们就可以这样使用:cout << person->getAge().getName() << std::endl;
这样使用的原因在于:在某一情况下,当我们需要如下操作的时候:我们需要关注的是:上文中由于getAge()函数接口是一个const成员函数,因此返回的是一个指向const类类型的const指针,如果类成员函数是非const函数,那么this指针是一个指向类类型的const指针。//移动光标到给定的位置并且设置此位置的字符 myScreen.set('#').move(4, 0);
因为this指针是编译器自动生成的,用户无法更改,因此this是一个const指针,也就是无法更改指针的内容。
const指针与指向const的指针:
const指针:指针是const类型,无法更改指针的值,但是可以更改指针指向的内容。
指向const的指针:指针不是const类型,但是指向的类型是const类型,所以可以更改指针的值,但是无法更改指向的值。