gpt4 book ai didi

与基类同名的 C++ 类成员

转载 作者:行者123 更新时间:2023-11-28 03:31:11 25 4
gpt4 key购买 nike

在基类方法中使用时 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

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

最佳答案

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

关于与基类同名的 C++ 类成员,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12581977/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com