浅谈C++虚基类
来源:互联网 发布:淘宝氛围图是什么样的 编辑:程序博客网 时间:2024/06/14 23:07
大家都知道C++是支持多重继承的,那么就会遇到这样一个问题。如果一个派生类的多个基类是从一个共同的基类派生出来的,那么这个派生类会出现多个最底层基类的拷贝,程序中如何分辨呢。虚基类是让基类只有一个拷贝,程序中就不会出现不确定性。虚基类在派生类中声明:格式如下:class 派生类名:virtual 继承方式 基类。光看文字会有些晕,下面上代码:
class base {
public :
base() {
cout<<"基类base的构造函数"<<endl;
}
~base() {
cout<<"基类base的析构函数"<<end;
}
};
class A:virtual public base{
public :
A() {
cout<<"基类A的构造函数"<<endl;
}
~A() {
cout<<"基类A的析构函数"<<end;
}
};
class B:virtual public base{
public :
B() {
cout<<"基类B的构造函数"<<endl;
}
~B() {
cout<<"基类B的析构函数"<<end;
}
};
class C:public A,public B{
public :
C() {
cout<<"基类C的构造函数"<<endl;
}
~C() {
cout<<"基类C的析构函数"<<end;
}
};
void main() {
C p;
}
执行结果如下:
基类base的构造函数
基类A的构造函数
基类B的构造函数
基类C的构造函数
基类B的析构函数
基类A的析构函数
基类base的析构函数
如果未使用虚基类那么程序结果为:
基类base的构造函数
基类A的构造函数
基类base的构造函数
基类B的构造函数
基类C的构造函数
基类B的析构函数
基类base的析构函数
基类A的析构函数
基类base的析构函数
此时类base有2个拷贝,当创建C的对象时,需要逐层次的向前进行访问,出现基类base被构造2次。
注意:一个类由多个基类派生出来,则虚基类的构造函数优先于非虚基类的构造函数的执行。
- 【C/C++】浅谈sizeof
- C语言编程浅谈
- 浅谈c,c++输入输出
- 浅谈C语言学习方法
- 浅谈Java和C
- C语言的浅谈!
- 浅谈C语言学习心得
- 《浅谈Objective-C》
- 浅谈C语言学习方法
- C语言内存浅谈
- C++【浅谈虚析构函数】
- 【C#】:浅谈反射机制
- [C++]浅谈构造函数
- 浅谈C语言学习方法
- 浅谈extern “C”
- 浅谈objective-c
- 【C语言】 浅谈指针
- 浅谈C语言数据类型
- os.path模块
- Java常用程序库
- 做网络成功的60句话 连载一
- python2的安装&python2和python3的不同
- DWZ富客户端框架的搭建
- 浅谈C++虚基类
- 搭建ssh2框架出错---找不到class的错误ContextLoaderListener
- ARM与X86架构对比区别
- The Best Way to Learn Python-Python学习之路
- Android4.0为all app图标加背景图
- static_cast, dynamic_cast, reinterpret_cast, const_cast区别比较
- IOS开发(88)之动画之视图的移动
- 主要讨论Spring与Hibernate集成中的session问题
- 不改动已存在代码,程序退出时检测内存泄露 .