c++ - 为什么这种继承失败(使用父类(super class)的方法)C++

标签 c++ inheritance overriding

我有以下类(class)

#include <iostream>

using namespace std;

class A {
public:
    int get_number() {return 1;}
    void tell_me_the_number() {
        cout << "the number is " << get_number() <<"\n";
    }
};

class B: public A {
public:
    int get_number() {return 2;}
};


int main() {
    A a;
    B b;
    a.tell_me_the_number();
    b.tell_me_the_number();
}

我希望这会输出给我:

the number is 1
the number is 2

但实际上我得到的是第一行的两倍。

B类的get_number()方法不是应该在是B类的时候调用吗?如果这是应该的,我怎样才能获得我想要的行为?

最佳答案

需要标记get_number作为virtual为了这个工作。

在 C++ 中,一分钱一分货。由于多态性增加了开销(内存和运行时 - 指向虚拟方法表和动态调度的指针),您必须明确说明要在运行时解析哪些函数调用。自 get_number不是 virtual , 来自 tell_me_the_number 的电话将在编译时解析并调用基类版本。

关于c++ - 为什么这种继承失败(使用父类(super class)的方法)C++,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16780629/

相关文章:

c++ - 如何在 Windows XP 中强制 "it' s now 安全地关闭计算机屏幕?

Java 继承 - 尝试创建通用方法从 Guava EventBus 库获取总线

java - 有没有办法覆盖 Java 中的类变量?

c++ - 从派生类对象访问重写的基类成员

c# - 使用多态性时重载方法的 ILDASM 代码

java - @AttributeOverride 是什么意思?

c++ - 为什么我会遇到段错误?

c++ - 通过参数传递任何函数

c++ - C++ 实例中的装饰器模式

java - Java 中的重写方法