我是
靠谱客的博主
清爽飞鸟,最近开发中收集的这篇文章主要介绍
面试题目(4)——虚基类,觉得挺不错的,现在分享给大家,希望可以做个参考。
概述
本博客(
http://blog.csdn.net/livelylittlefish)贴出作者(三二一、小鱼)相关研究、学习内容所做的笔记,欢迎广大朋友指正!
虚基类
该文基础知识可参见“C++学习笔记(10)——虚基类的作用”
当一个基类被声明为虚基类后,即使它成为了多继承链路上的公共基类,最后的派生类中也只有它的一个备份。例如:
class CBase { };
class CDerive1:virtual public CBase{ };
class CDerive2:virtual public CBase{ };
class CDerive12:public CDerive1,CDerive2{ };
则在类CDerive12的对象中,仅有类CBase的一个对象数据
虚基类的特点:
虚基类构造函数的参数必须由最新派生出来的类负责初始化(即使不是直接继承);
虚基类的构造函数先于非虚基类的构造函数执行。
代码如下:
/**/
/************************************************************************
* 虚继承构造函数的调用顺序
************************************************************************/
![](http://images.csdn.net/syntaxhighlighting/outliningindicators/none.gif)
#include
<
iostream.h
>
#include
<
stdio.h
>
![](http://images.csdn.net/syntaxhighlighting/outliningindicators/none.gif)
class
A
![](http://images.csdn.net/syntaxhighlighting/outliningindicators/expandedblockstart.gif)
...
{
public:
A(char *s)
![](http://images.csdn.net/syntaxhighlighting/outliningindicators/expandedsubblockstart.gif)
...{
cout<<s<<endl;
}
![](http://images.csdn.net/syntaxhighlighting/outliningindicators/expandedsubblockstart.gif)
~A()...{cout<<"A destruction!"<<endl;}
}
;
![](http://images.csdn.net/syntaxhighlighting/outliningindicators/none.gif)
class
B:
virtual
public
A
![](http://images.csdn.net/syntaxhighlighting/outliningindicators/expandedblockstart.gif)
...
{
public:
B(char *s1,char *s2):A(s1)
![](http://images.csdn.net/syntaxhighlighting/outliningindicators/expandedsubblockstart.gif)
...{
cout<<s2<<endl;
}
![](http://images.csdn.net/syntaxhighlighting/outliningindicators/expandedsubblockstart.gif)
~B()...{cout<<"B destruction!"<<endl;}
}
;
![](http://images.csdn.net/syntaxhighlighting/outliningindicators/none.gif)
class
C:
virtual
public
A
![](http://images.csdn.net/syntaxhighlighting/outliningindicators/expandedblockstart.gif)
...
{
public:
C(char *s1,char *s2):A(s1)
![](http://images.csdn.net/syntaxhighlighting/outliningindicators/expandedsubblockstart.gif)
...{
cout<<s2<<endl;
}
![](http://images.csdn.net/syntaxhighlighting/outliningindicators/expandedsubblockstart.gif)
~C()...{cout<<"C destruction!"<<endl;}
}
;
![](http://images.csdn.net/syntaxhighlighting/outliningindicators/none.gif)
class
D:
public
B,
public
C
![](http://images.csdn.net/syntaxhighlighting/outliningindicators/expandedblockstart.gif)
...
{
public:
D(char *s1,char *s2,char *s3,char *s4):B(s1,s2),C(s1,s3),A(s1)
![](http://images.csdn.net/syntaxhighlighting/outliningindicators/expandedsubblockstart.gif)
...{
cout<<s4<<endl;
}
![](http://images.csdn.net/syntaxhighlighting/outliningindicators/expandedsubblockstart.gif)
~D()...{cout<<"D destruction!"<<endl;}
}
;
![](http://images.csdn.net/syntaxhighlighting/outliningindicators/none.gif)
int
main()
![](http://images.csdn.net/syntaxhighlighting/outliningindicators/expandedblockstart.gif)
...
{
D d("A construction!","B construction!","C construction!","D construction!");
![](http://images.csdn.net/syntaxhighlighting/outliningindicators/inblock.gif)
return 0;
}
运行结果如下:
最后
以上就是清爽飞鸟为你收集整理的面试题目(4)——虚基类的全部内容,希望文章能够帮你解决面试题目(4)——虚基类所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
发表评论 取消回复