this指针是系统自动生成,且隐藏的,this指针只能由系统定义,不能自己手动定义。
this指针是属于类的,作用域在类的内部,不是对象的一部分。
this指针存在与类中每一个普通成员函数中,类的普通函数访问类的普通成员的时候,this总是指向调用者的对象,this指针不能修改指向。
this指针其实是隐藏起来的,当类的成员与参数是同一个名字时,需要使用this指针,否则不需要使用this指针。
以下这段参考:
1.this指针的类型:类类型* const,即成员函数中,不能给this指针赋值
2.只能在“成员函数”的内部使用
3.this指针本质上是“成员函数”的形参,当对象调用成员函数时,将对象地址作为实参传递给this形参。所以对象中不存储this指针
4.this指针是“成员函数”第一个隐含的指针形参,通常this指针在系统中是隐含存在的,也可以把它显式表示出来?,void fun();等价于void fun(myclass * this);
5.非静态成员函数中可以直接使用this来代表指向该函数作用对象的指针,静态成员函数中不能使用this指针,因为静态成员函数并不具体作用与某个对象,因此,静态成员函数真实的参数的个数,就是程序中写出的参数个数
在 C++ 中,`this` 是一个指向当前对象的指针。
它是在每个成员函数中自动创建的,可以通过使用它来访问对象的成员变量和成员函数。
下面我们使用三个不同的实例来说明 `this` 指针的使用方法和细节。
// 在 C++ 中,`this` 是一个指向当前对象的指针。
// 它是在每个成员函数中自动创建的,可以通过使用它来访问对象的成员变量和成员函数。
#include <iostream>
using namespace std;
// 使用 `this` 访问成员变量
class Person {
public:
Person(const string & n) : name(n) {}
void printName() {
cout << "my name is " << name << endl;
// 使用 `this` 指针来访问对象的成员变量。
// 在函数中,对于每个对象,都会使用 `this` 指针来引用 `name` 成员变量。
cout << "my name is also " << this->name << endl;
}
private:
string name;
};
int main()
{
Person p("tom");
p.printName();
return 0;
}
// 使用 `this` 返回调用对象的引用
#include <iostream>
using namespace std;
class Person {
public:
Person(const string & n) : name(n) {}
Person &setAge(int a) {
age = a;
// `this` 返回调用对象的引用,从而可以链式调用其他成员函数
return *this;
}
void showInfo() {
cout << "name : " << name << " age : " << age << endl;
}
private:
string name;
int age;
};
int main()
{
Person p("tom");
// `this` 指针来访问对象的成员变量。在函数中,对于每个对象,我们都会使用 `this` 指针来引用 `name` 成员变量。
// 使用链式调用语法设置 `age` 值并输出对象信息。
p.setAge(23).showInfo();
return 0;
}
// 使用this在成员函数中比较2个对象
#include <iostream>
using namespace std;
class Rectangle {
public:
Rectangle(int w, int h) : width(w), height(h) {}
// *this` 指针来访问调用对象的 `width` 和 `height` 成员变量,并使用传入的 `r` 参数进行比较。
bool isBiggerThan(Rectangle & r) {
return (this->width * this->height > r.width * r.height);
}
private:
int width;
int height;
};
int main()
{
Rectangle r1(5, 6);
Rectangle r2(4, 7);
if (r1.isBiggerThan(r2)) {
cout << "r1 is bigger than r2" << endl;
} else {
cout << "r1 is not bigger than r2" << endl;
}
return 0;
}