属性和方法属于类,在类实例化过程后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);
}