腾讯模拟笔试题,为什么C++代码输出是daxbe
代码如下:
class x { public: virtual void f(){cout<<"x"<<endl;} }; class a:public x { public: virtual void f(){cout<<"a"<<endl;} }; class b:public x { public: virtual void f(){cout<<"b"<<endl;} }; class d:public a { public: virtual void f(){cout<<"d"<<endl;} }; class e:public a { public: virtual void f(){cout<<"e"<<endl;} }; int main() { vector<void*> v; /*1\. 对于自定义类类型: 如果该类没有定义构造函数(由编译器合成默认构造函数)但有虚函数, 那么class c = new class;和class c = new class();一样,都会调用默认构造函数。 */ v.push_back(new d); v.push_back(new a); v.push_back(new x); v.push_back(new b); v.push_back(new e); for(int i=0;i<v.size();i++) { static_cast<b*>(v[i])->f(); } return 0; }
继承关系大家可以从代码看到。 d/a/x/b/e的实例指针分别转化为void*指针,然后再转化成b*类型指针,为什么输出是:
d a x b e
为什么a/d/e和b并没有继承关系,转化后依然可以输出子类的内容?
#腾讯##C++工程师#