P27 C++this 关键字

目录

前言

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;
}

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
THE END
分享
二维码
< <上一篇
下一篇>>