我试图理解 C++ 中的虚函数。
struct B {
int f() { return 1;}
}
struct D : B {
int f() { return 1;}
}
在主函数中:
B* b = new D;
b.f()
我的理解是基类和派生类之间存在“竞争”:它们都有一个同名和同一个签名的函数。当b.f()
被调用时,只会选择其中一个。在虚拟情况下:
- 根据 b 指向的对象的类型选择获胜者
- 该选择是在运行时做出的
在非虚拟情况下:
- 根据指针 b 的类型选择获胜者
- 该选择是在编译时做出的
我不明白两者之间的因果关系
virtual
关键字的使用- 查找 b 指向的对象类型的能力
- 编译时间与运行时间
例如,为什么我们不能在编译时执行 (2)?