gpt4 book ai didi

c++ - 关于派生类成员隐藏基类成员的警告

转载 作者:行者123 更新时间:2023-12-01 17:35:34 25 4
gpt4 key购买 nike

当局部变量遮蔽另一个变量时,C++ 编译器会发出警告。例如https://godbolt.org/g/TYYf8F

但是,当派生类的成员隐藏基类的成员时,主要的 C++ 编译器都不会发出警告:

class A
{
int _memberVar = 2;

public:
virtual int memberVar()
{
return _memberVar;
}
};

class B : public A
{
int _memberVar = 3;
};

int main()
{
A* pB = new B();
return pB->memberVar(); // returns 2
}

参见https://godbolt.org/g/fBMUAd

背后有什么原因吗?

最佳答案

虚拟是函数调用者中决定调用哪个函数的机制。它不会使该函数以某种方式表现为“虚拟”。由于您没有覆盖函数 B::memberVar(),它仍然调用 A::memberVar(),并且其行为与 A 的任何其他成员函数相同。

关于c++ - 关于派生类成员隐藏基类成员的警告,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44410120/

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