你能解释一下this指针的概念吗?

14

我需要了解 this 指针的概念,最好附带一个示例。

我是C++的新手,请使用简单的语言,以便我更好地理解。


3
您需要针对指针提出具体问题。您不理解的是什么,特别是什么? - Paul R
什么是概念,它的用途是什么?如果可能的话,给出一个简单的例子。 - Trupti
3
@Paul R 这是一个具体的问题。提问方式并不好。 - wheaties
3
我同意@wheaties的观点,请__不要关闭__这个问题。这怎么可能是“不是一个真正的问题”?但可以随意进行改进。 - sbi
6
有一天,保罗·狄拉克在讲课时在黑板上的一个方程式中犯了一个罕见的错误。一个勇敢的学生举手发言:“狄拉克教授,我不理解第二个方程。” 狄拉克继续书写,这位学生以为自己的话没被听到,于是又举起手并重复了他的发言,但是狄拉克仍旧继续书写……最后,另一个学生插话说:“狄拉克教授,那个人是在问问题。” “哦?”狄拉克回答,“我以为他在陈述一个事实。” - SEngstrom
4个回答

9

this 是指向类的实例的指针,并且对所有非静态成员函数可用。

如果您声明了一个类,该类具有私有成员 foo 和方法 bar,则 foo 可通过 this->foobar 中使用,但不可通过 instance->foo 对“外部人”使用。


请提供完整的示例。 - Trupti

6

this指针用于类中引用自身。在返回对自身的引用时,这通常很方便。看看使用赋值运算符的典型示例:

class Foo{
public:
    double bar;
    Foo& operator=(const Foo& rhs){
        bar = rhs.bar;
        return *this;
    }
};

有时候,如果事情变得混乱,我们甚至会说
this->bar = rhs.bar;

但在这种情况下,通常认为这是过度的。

接下来,当我们构建对象时,但包含的类需要引用我们的对象才能发挥作用:

class Foo{
public:
    Foo(const Bar& aBar) : mBar(aBar){}

    int bounded(){ return mBar.value < 0 ? 0 : mBar.value; }
private:

    const Bar& mBar;
};

class Bar{
public:

      Bar(int val) : mFoo(*this), value(val){}

      int getValue(){ return mFoo.bounded(); }

private:

      int value;
      Foo mFoo;
};

因此,this 用于将我们的对象传递给包含的对象。否则,如果没有 this ,我们如何表示我们所在的类?类定义中没有该对象的实例。它是一个类,而不是一个对象。


3
在面向对象编程中,如果你在某个对象上调用了一个方法,this指针会指向你调用该方法的对象。例如,如果你有这个类:
class X {
public:
  X(int ii) : i(ii) {}
  void f();
private:
  int i;
  void g() {}
};

假设有一个名称为x的对象,并且您在x上调用f()

x.f();

然后在 X::f() 内部,this 指向 x

void X::f()
{
  this->g();
  std::cout << this->i; // will print the value of x.i
}

由于访问由this引用的类成员非常普遍,因此您可以省略this->

// the same as above
void X::f()
{
  g();
  std::cout << i;
}

1
指针是一种变量类型,它指向程序内存中的另一个位置指针只能保存内存地址。

image

例如,如果我们说一个“int指针” -> 它保存了一个int变量的内存地址。
“void指针” -> 可以保存任何不是特定数据类型的内存地址。 &运算符给出变量的地址(或指向的指针的值)。

4
他指的是 this 指针,而不是一般的指针。 - wheaties
1
@wheaties:公平地说,这在原始问题中并不清楚——它看起来像是一个非常模糊和一般的“我不理解指针”的求助呼声。 - Paul R

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接