C++ 虚基类简单使用
来源:互联网 发布:苹果手机端口号 编辑:程序博客网 时间:2024/05/22 10:53
1、概述
虚基类是用关键字virtual声明继承的父类,即便该基类在多条链路上被一个子类继承,但是该子类中只包含一个该虚基类的备份,这也是虚基类的作用所在。
正是由于虚基类的这个作用,所以在每个子类的构造函数中必须显示的调用该虚基类的构造函数,不管该虚基类是不是直接的父类。
其次,虚基类的构造函数的调用早于其他非虚基类的构造函数的调用。
上面两点就是虚基类的特性。
2、代码示例
我们来看一段简单的代码,体现虚基类的这两个特性。
#include <iostream>#include <cstdio>using namespace std;class Base{public : int base; Base(int a = 0) { this->base = a; cout<<"Base Constructer "<<a<<endl; }};class A : public virtual Base{public : int a; A(int a, int b):a(a), Base(b) { cout<<"A Constructer"<<endl; }};class B : public virtual Base{public : int b; B(int a, int b) : b(a), Base(b) { cout<<"B Constructer"<<endl; }};class C : public B, public A, public virtual Base{public : int c; C(int a, int b, int c, int d, int e) : A(a, b), B(c, d), Base(e) { cout<<"C Constructer"<<endl; }};int main(){ C c(1, 2, 3, 4, 5); return 0;}
程序运行结果:
我们看到最后一个子类C显式的调用了虚基类的构造函数,这个是必须的。
然后就是虽然虚基类在最后一个声明,但是Base的构造函数最先被调用,而且只被调用了一次,说明子类中只包含了一个该基类的复本。
虚基类的特性就从这段代码的运行结果中一目了然了。
- c#Func简单使用
- C++--boost简单使用
- Turbo C简单使用教程
- C 分支 循环 简单使用
- C#:System.Array简单使用
- C++,boost简单使用1
- C++Future简单的使用
- <c:redirect>的简单使用
- <c:forEach>的简单使用
- C++STL的简单使用
- [c#]RabbitMQ的简单使用
- C#: indexof的简单使用
- linux c libcurl的简单使用
- linux c libcurl的简单使用
- linux c libcurl的简单使用
- object-c中delegate使用简单方法
- sqlite3 c api 的简单使用
- linux c libcurl的简单使用
- 疑问 : 断点失效? 条件: vs2008在Win7X64真机和Win7X64虚拟机(vmware9.0)之间进行远程调试
- java环境变量配置
- pthread_barrier_init,pthread_barrier_wait,pthread_barrier_destroy简介
- linux简单之美(二)
- VS2008 如何将Release版本设置可以调试的DEBUG版本
- C++ 虚基类简单使用
- C中的符号表
- 句柄和指针 三
- hdu1996
- 2013 New Year’s Resolutions
- Oracle 11GR1进行创建数据库时出错解决一例
- C++ 智能指针
- linux程序分析工具介绍(二)—-ldd,nm
- opncv2.4.3 SIFT编译出错