0

this 指针在基类方法中使用时的行为方式:

class Base{
public:
   int a;
   Base() : a(5) {}
   void func(){
       std::cout << " value is : " << this->a << std::endl;
   }
};

class Derived : public Base{
private:
   int a;
public:
   Derived() : a(1){}
   void func1(){
       std::cout << " value is : " << this->a << std::endl;
   }
};

int main(){
   Derived d;
   d.func();
   d.func1();
}

代码的输出是:

值为:5

值为:1

因为我使用同一个对象来调用这两个函数。那么这个指针的值在基类和派生类的方法中会有所不同吗?

4

3 回答 3

2

this->a相当于a在那个上下文中,所以它与基指针无关。

成员a是静态解析的,派生类隐藏基类成员,因为它们都命名为a.

要检查this指针本身,您可以直接打印它:

std::cout << this;

这两个对象都是一样的。

从中可以看出的主要内容Base::aDerived::a不同的。在中尝试以下操作Derived

void func1(){
    std::cout << "derived value is : " << a << std::endl;
    std::cout << "   base value is : " << Base::a << std::endl;
}
于 2012-09-25T11:27:57.377 回答
0

this指针将始终指向它所在的当前对象。

调用时func,使用基类并打印基类字段。但,

调用时func1,使用派生类并打印其字段。


尝试评论这一行Derived() : a(1){},你会更清楚。

于 2012-09-25T11:27:16.100 回答
0

您必须做this->Base::a才能访问 Base 的a. 否则你总是访问Derived::a.

于 2012-09-25T11:30:30.403 回答