考虑这个 C++ 代码:
#include <iostream>
using namespace std;
struct B {
virtual int f() { return 1; }
int g() { return 2; }
};
struct D1 : public B { // (*)
int g() { return 3; }
};
struct D2 : public B { // (*)
virtual int f() { return 4; }
};
struct M : public D1, public D2 {
int g() { return 5; }
};
int main() {
M m;
D1* d1 = &m;
cout << d1->f()
<< static_cast<D2&>(m).g()
<< static_cast<B*>(d1)->g()
<< m.g();
}
它打印1225
。如果我们进行虚拟继承,即在标有 (*) 的行中添加virtual
before ,它会打印.public
4225
- 你能解释一下为什么
1
会改变4
吗? - 你能解释一下
static_cast<D2&>(m)
和的意思static_cast<B*>(d1)
吗? - 你怎么不会迷失在这种组合中?你在画什么吗?
- 在正常项目中发现如此复杂的设置是否很常见?