腾讯模拟笔试题,为什么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++工程师#
海康威视公司福利 1125人发布