c++基础(this)

Cplusplus-tutorial-in-hindi.jpg

属性和方法属于类,在类实例化过程后this是指向类型实例化后的对象。想要调用类静态方法以外的方法需要先对类型实例化,然后通过实例化的对象调用这些方法。
所以要想调用this,我们需要先实例化一个对象,有了对象,this 才能起作用所以使用this是有前提条件的。

今天分享在 c++ 中 this存在的意义,以及如何使用this

class Point
{
  public:
    int x, y;
    Point(int x, int y) : x(x), y(y)
    {
    }

    void Print()
    {
        std::cout << x << " , " << y << std::endl;
    }
};

可以在构造函数进行赋值Point(int x, int y) : x(x), y(y)这样对成员变量进行赋值,我们可以使用这样构造函数初始化列表来进行赋值。

和下面代码一样可能让我们感觉有些不是很清晰,我们想将值赋值给实例化对象上。这时就会用到this

    Point(int x, int y)
    {
        x = x;
        y = y;
    }
    Point(int x, int y)
    {
        Point *p = this;
    }

因为 this 指向实例化对象的指针,所以调用指针的内容的属性,需要先取值(*this) 然后可以使用(.)操作符来获取其属性。

    Point(int x, int y)
    {
        Point *p = this;
        p->x = x;
        p->y = y;
    }
    Point(int x, int y)
    {
        //Point *p = this;
        (*this).x = x;
        (*this).y = y;
    }

直接通过->调用指针对象的属性进行赋值。这样代码更简单易懂。

    Point(int x, int y)
    {
        //Point *p = this;
        this->x = x;
        this->y = y;
    }

GetX()也可以调用 Point,因为用const修饰了GetX()这样就限制了GetX中不可以修改类成员变量,所以需要用const进行修饰。

    int GetX() const
    {
        const Point *e = this;
        return e->x;
    }
void PrintPoint(Point *p);

class Point
{
  public:
    int x, y;
    Point(int x, int y)
    {
        Point *p = this;
        p->x = x;
        p->y = y;
        PrintPoint(this);
    }

    int GetX() const
    {
        const Point *e = this;
        return e->x;
    }

    void Print()
    {
        std::cout << x << " , " << y << std::endl;
    }
};

void PrintPoint(Point *p)
{
    //Print
}

void PrintPoint(Point *p);接收 Point 对象的指针作为参数,因为this本身就是指针类型。所以可以直接在构造函数内直接将this传入PrintPoint(this);

void PrintPoint(Point &p);

在 Point 的构造函数可以将*this作为 Point 引用传入到PrintPoint中。

void PrintPoint(Point &p);
    Point(int x, int y)
    {
        Point *p = this;
        p->x = x;
        p->y = y;
        PrintPoint(*this);
    }

你可能感兴趣的:(c++基础(this))