[英]Why can't I call protected virtual base class function in the derived class overridden function?
[英]Why does virtual not call the overridden function here?
#include <iostream>
struct MemA { virtual void tellClass() { std::cout << "I am member of class A" << std::endl; } };
struct MemB : public MemA { void tellClass() { std::cout << "I am member of class B" << std::endl; } };
class A {
MemA *current;
public:
A() : current(new MemA()) {}
void getMemClass() { current->tellClass(); }
~A() { delete current; }
};
class B : public A {
MemB *current;
public:
B() : A(), current(new MemB()) {}
~B() { delete current; }
};
void main() { B().getMemClass(); }
在上面的程序中,我将tellClass()
function 声明为虚拟,这意味着它应该决定在运行时调用哪个 function。 尽管它正在打印“我是 class A 的成员”,即使我正在从 class B object 调用getMemClass()
,它在继承 MemB 期间隐藏了MemA *current
。 MemB *current
我怎样才能让它正常工作?
A
中的current
与B
中的current
是不同的成员,即有两个成员A::current
和B::current
。 B
有他们两个作为成员。
前者仅隐藏在class B
的上下文中命名不合格的 current 中,B current
的是B::current
而不是A::current
。 在 class A
的上下文中(您正在评估调用current->tellClass();
),非限定名称仍然是指A::current
成员。
C++ 中的数据成员不能像(虚拟)成员函数一样被覆盖。
B
object 的A::current
成员指向MemA
完整 object,而不是MemB
object。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.