C++虚基类详解
来源:互联网 发布:如何开通阿里云服务器 编辑:程序博客网 时间:2024/05/17 15:38
http://www.weixueyuan.net/view/5870.html
在上一节中,有两个身份证号显然是不合理的。为此,可以把class Person这个共同基类设置为虚基类,这样,从不同路径继承来的同名数据成员在内存中就只有一个拷贝,同名函数也只有一种映射。
虚基类定义方式
虚基类(virtual base class)定义方式如下:class 派生类名:virtual 访问限定符 基类类名{...};
或:
class 派生类名:访问限定符 virtual 基类类名{...};
其中:virtual 关键字只对紧随其后的基类名起作用。
例如:
//学生类定义:
class Student::virtual public Person{...};
//教职工类定义:
class Employee::virtual public Person{...};
采用虚基类的多重继承的特点
采用虚基类后,在职研究生类对象的储存如下图所示。与8.3节中的图8.4(b)不同的是:在Person的位置上放的是指针,两个指针都指向Person成员存储的内存。这种继承称为虚拟继承(virtual inheritance)。
采用虚基类的多重继承的构造与析构的次序
在派生类对象的创建中,构造次序如下:- 虚基类的构造函数被调用,并按它们声明的顺序构造;
- 非虚基类的构造函数按它们声明的顺序调用;
- 成员对象的构造函数;
- 派生类自己的构造函数被调用。
析构的次序与构造的次序相反。
应用举例
【例8.3】在采用虚基类的多重继承中,构造与析构的次序。 (查看源码)运行结果
Constructor Bclass3 //第一个虚拟基类,与派生类析构函数排列无关
Constructor Bclass2 //第二个虚拟基类
Constructor Bclass1 //非虚拟基类
Constructor Object //对象成员
派生类建立!
主程序运行!
派生类析构!
deconstructor Object //析构次序相反
deconstructor Bclass1
deconstructor Bclass2
deconstructor Bclass3
【例8.4】虚基类在多层多重继承中的应用——在职研究生类定义。(查看源码)
大学在册人员继承关系如下图所示:
图 大学在册人员继承关系
采用虚基类的在职研究生类的多重继承结构如下图所示:
运行时可以看到,尽管Employee和Student的构造函数都包含Person的构造函数,但并未真正调用。唯一的一次调用是在EGStudent构造函数中。
0 0
- C++:虚基类详解
- 【C/C++】:sizeof详解
- C/C++-----static详解
- C/C++extern详解
- static详解(c/c++)
- C/C++static关键字详解
- [C/C++] 指针(详解)
- C/C++static关键字详解
- C++/C链接过程详解
- C/C++static、const详解
- 【c/c++】输入函数详解
- C++/C中指针详解
- c++/c 函数指针详解
- [c/c++][转]堆栈详解
- C/C++volatile关键字详解
- C语言宏定义详解 - [C,C++]
- 【c/c++】C语言main()函数详解
- C语言申请详解
- 创建子窗口显示不正常的问题
- C++多重继承与派生类成员标识
- Linux之守护进程理解
- PAT Basic Level 1014. 福尔摩斯的约会(20)
- Node.js 究竟是什么?
- C++虚基类详解
- PHP验证登录用户名和密码
- PHP编译configure说明
- wamp apache无法启动的解决方法
- python chr()和ord()
- UITextView显示html代码,并调整attributedText的字体大小
- hdu 1025 (LIS(n*log(n)时间复杂度))
- JAVA中控制double类型小数点后位数的方法
- android保存崩溃时的错误信息log至本地【源码+jar包+使用说...