为什么在C 中覆盖了基本方法
Why is base method being called once overridden in C++
我的情况类似于下面的情况(代码不准确,只是为了确定我的观点(。当我致电D.A()
时,我希望打印"Desc"
一词,而是打印"Base"
。
class Base {
public:
void A() { B(); }
virtual void B() { cout << "Base"; }
}
class Descendant : public Base {
public:
virtual void B() overriden { cout << "Desc"; }
}
main () {
Descendant D;
D.A();
}
我在这里一定有一些概念上的东西。D.A()
是否应引起"Desc"
打印?如果没有,为什么?
问题中存在重要的错误。方法A实际上是基类的构造函数。而且,由于这些派生的类还不存在,因此构造函数无法调用衍生类的任何方法(甚至虚拟(,这是有道理的。
当a是非ctor时,它可以按预期工作。
相关文章:
- 循环依赖,在继承类的情况下使用覆盖方法
- 确保模拟的 GTest 方法覆盖虚拟方法
- 覆盖作为另一个类的好友的虚拟受保护方法
- 如何使用方法覆盖在输出屏幕上显示堆栈整数值
- 是否有一种有效的方法来搜索队列中的关键字并覆盖其值
- C ++中的方法覆盖:是编译时还是运行时多态性?
- C++私有纯虚拟方法覆盖为公共方法
- 我试着了解方法覆盖是如何工作的,不知道为什么输出 2
- 使用父类方法覆盖的多重继承
- C++ - 调用子项方法覆盖父项列表中的内容
- 一个类的方法覆盖另一个类的所有方法
- C 多重继承,虚拟方法覆盖问题和协变量返回类型
- 用方法覆盖的C 继承
- 如何表达匿名方法覆盖,就像在 java 中使用 c++ 一样
- 如何使用虚拟方法覆盖和继承进行优先处理
- 当方法覆盖和忽略const时,GCC编译器不显示警告
- 代理dll:方法覆盖/方法转发(COM实现继承)
- c++纯虚方法覆盖
- C++虚拟方法覆盖
- 如何将类中定义的虚方法覆盖到函数内部的另一个类中