目录
前言
01 this关键字的引入
02 this关键字
前言
本章的主题是 C++ 中的 this 关键字。
以前第一次学qt的时候就遇到了this关键字,那时候还不是很会C++,所以有点懵,现在我们就来讲解以下C++中的this关键字
C++ 中有一个关键字 this,通过它,可以访问成员函数。成员函数就是属于某个类的函数或者方法。
在方法内部,我们可以引用 this,this是一个指向当前对象实例的指针,该方法属于这个对象实例。
在 C++ 中,我们可以写一个方法,一个静态方法。为了调用这个方法,我们需要先实例化一个对象,然后调用这个方法,这个方法必须用一个有效的对象来调用,关键字 this 是指向该对象的指针。
这实际上对方法的一般工作方式非常重要,我们看看实际代码中的使用。
01 this关键字的引入
我们创建了一个名为 demo的类,它有一些公共字段 x 和 y,还有一个带参数的构造函数。然后使用成员初始化列表完成 x 和 y 的初始化。
这么做时没有问题的
但如果我们不使用初始化列表,而是使用以前的方法,则会遇到一些问题。
上面的代码中,我们只是将变量的值赋值给自己,什么都没做。(可能有些编译器是没问题的,但是这样逻辑有点不清晰,而且也并不知道它打印了哪个xy)
02 this关键字
而我们真正想做的是引用这个类的 x 和 y,实际的类成员。this 关键字可以让我们做到这一点。
上面提到过,this 是指向当前对象的指针,将鼠标悬停在 this 上可以看到相关信息。
//测试代码
#include <iostream>
class Demo
{
private:
int x, y;
public:
Demo(int x, int y)
{
this->x = x;
this->y = y;
std::cout << this->x <<this->y<< std::endl;
}
};
int main()
{
Demo demo(1,2);
return 0;
}
然后就可以使用 this 访问它指向的对象的成员了。
当然你也可以逆向引用它达到相同的目的,不过这样写更加清晰和简捷。
现在我们有了给 x 和 y 成员赋值的方法了,当前情况下,如果没有 this,就无法操作了。
还有一个需要注意的地方。
如果我们想要写一个返回这些变量之一的函数,后面加上 const 是很有必要的,因为它不会修改这个类。在这样的一个函数中,我们不能直接将 this 赋值给 Entity*,必须是一个 const Demo。
因为在函数后面写上 const,我们就不能修改这个类,所以 this 必须是 const 的,这样就会限制你做一些修改的事情。
另一个有用的场合是,如果我们想在类中调用这个类之外的函数(那就不叫类方法了,类的外部叫函数),而这个函数将 Demo类作为参数。那么我们想要传递这个 Demo类的当前实例到这个函数,那该怎么做呢?这个时候就要使用 this 了,这个应该不难理解
我们首先定义一个函数,名为print(),该函数有一个参数,就是一个Demo类的指针,如果我们想在类的内部调用它,那该如何传参呢?很简单,那就是用this关键字即可
就是这样。
用于测试的代码
#include <iostream>
void print(Demo *demo);
class Demo
{
private:
int x, y;
public:
Demo(int x, int y)
{
this->x = x;
this->y = y;
std::cout << this->x <<this->y<< std::endl;
print(this);
}
int getX() const
{
const Demo* demo = this;
return this->x;
}
};
void print(Demo *demo)
{
std::cout << demo->getX() << std::endl;
}
int main()
{
Demo demo(1,2);
return 0;
}