0

我有以下课程

#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

但实际上,我得到了 1 号线的两倍。

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

4

1 回答 1

6

你需要标记get_numbervirtual这个工作。

在 C++ 中,你得到你所支付的。由于多态性增加了开销(内存和运行时 - 指向虚拟方法表和动态调度的指针),因此您必须明确说明您希望在运行时解决哪些函数调用。由于get_numberis not virtual,调用 from tell_me_the_number将在编译时解析,并调用基类版本。

于 2013-05-27T21:16:47.807 回答