c++ this指针

发布时间:2024年01月02日

this指针是系统自动生成,且隐藏的,this指针只能由系统定义,不能自己手动定义。

this指针是属于类的,作用域在类的内部,不是对象的一部分。

this指针存在与类中每一个普通成员函数中,类的普通函数访问类的普通成员的时候,this总是指向调用者的对象,this指针不能修改指向。

this指针其实是隐藏起来的,当类的成员与参数是同一个名字时,需要使用this指针,否则不需要使用this指针。

以下这段参考:

this指针-CSDN博客

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

文章来源:https://blog.csdn.net/tankeven/article/details/135331094
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。