跳转到内容

C++ 编程/类/this

来自维基教科书,自由的教科书

this 指针

[编辑 | 编辑源代码]

this 关键字充当指向被引用类的指针。this 指针的行为与其他指针相同,尽管您无法更改指针本身。阅读关于 指针和引用 的部分以了解有关一般指针的更多信息。

this 指针只能在类的、联合的或结构的非静态成员函数中访问,在静态成员函数中不可用。无需为this 指针编写代码,因为编译器会隐式地执行此操作。在使用调试器时,您可以在程序单步执行非静态类函数时在某些变量列表中看到this 指针。

在以下示例中,编译器在非静态成员函数 int getData() 中插入了隐式参数this。此外,启动调用的代码传递了一个隐式参数(由编译器提供)。

class Foo
{
private:
    int iX;
public:
    Foo(){ iX = 5; };

    int getData() 
    {   
        return this->iX;  // this is provided by the compiler at compile time
    }
};

int main()
{
    Foo Example;
    int iTemp;

    iTemp = Example.getData(&Example);  // compiler adds the &Example reference at compile time

    return 0;
}

在某些情况下,程序员应该了解并使用this 指针。在重载赋值运算符时,应该使用this 指针来防止灾难。例如,在上面的代码中添加一个赋值运算符。

class Foo
{
private:
    int iX;
public:
    Foo() { iX = 5; };

    int getData()          
    {                            
        return iX;  
    }

    Foo& operator=(const Foo &RHS);
};

Foo& Foo::operator=(const Foo &RHS)
{
    if(this != &RHS)
    {    // the if this test prevents an object from copying to itself (ie. RHS = RHS;)
        this->iX = RHS.iX;     // this is suitable for this class, but can be more complex when
                               // copying an object in a different much larger class
    }

    return (*this);            // returning an object allows chaining, like a = b = c; statements
}

无论您对this 了解多少,它在实现任何类中都至关重要。

华夏公益教科书