c++基础(this)

作者 : 开心源码 本文共1314个字,预计阅读时间需要4分钟 发布时间: 2022-05-12 共168人阅读

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

说明
1. 本站所有资源来源于用户上传和网络,如有侵权请邮件联系站长!
2. 分享目的仅供大家学习和交流,您必须在下载后24小时内删除!
3. 不得使用于非法商业用途,不得违反国家法律。否则后果自负!
4. 本站提供的源码、模板、插件等等其他资源,都不包含技术服务请大家谅解!
5. 如有链接无法下载、失效或广告,请联系管理员处理!
6. 本站资源售价只是摆设,本站源码仅提供给会员学习使用!
7. 如遇到加密压缩包,请使用360解压,如遇到无法解压的请联系管理员
开心源码网 » c++基础(this)

发表回复