【发布时间】:2015-11-16 11:08:30
【问题描述】:
class Base {
public:
virtual void f(float) { cout << "Base::f(float)\n"; }
};
class Derived : public Base {
public:
virtual void f(int) { cout << "Derived::f(int)\n"; }
};
int main() {
Derived *d = new Derived();
Base *b = d;
b->f(3.14F);
d->f(3.14F);
}
据我了解,Derived 类的虚表是:
+-----------------+
| Base::f(float) |
+-----------------+
| Derived::f(int) |
+-----------------+
但是,这个程序输出:
Base::f(float)
Derived::f(int)
为什么这两个输出不同的结果?我认为b 和d 应该指向同一个虚拟表。
【问题讨论】:
-
您到底期望什么?
标签: c++ overriding virtual-functions method-signature