在基类方法中使用时,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
因为我使用相同的对象来调用这两个函数。那么这个指针的值在base和派生类的方法中会有所不同吗?
答案 0 :(得分:2)
this->a
在该上下文中等同于a
,因此它与基指针无关。
成员a
是静态解析的,派生类隐藏了基类成员,因为它们都被命名为a
。
要检查this
指针本身,您可以直接打印它:
std::cout << this;
两个对象都是一样的。
要做的主要是Base::a
和Derived::a
不同。请在Derived
中尝试以下内容:
void func1(){
std::cout << "derived value is : " << a << std::endl;
std::cout << " base value is : " << Base::a << std::endl;
}
答案 1 :(得分:0)
this
指针始终指向当前存在的对象。
调用func
时,使用Base类并打印基类字段。但是,
调用func1
时,将使用派生类并打印其字段。
尝试评论此行Derived() : a(1){}
,您会更清晰。
答案 2 :(得分:0)
您必须this->Base::a
才能访问Base a
。否则,您始终可以访问Derived::a
。