知识点——派生类生成过程——单继承的构造函数和析构函数
来源:互联网 发布:python 接收post数据 编辑:程序博客网 时间:2024/05/18 14:11
心得:
1、当基类中声明有缺省的构造函数或未声明的构造函数时,派生类的构造函数不可以向基类的构造函数传递参数,也可以不声明,构造派生类对象时调用基类的缺省的构造函数
2、当需要执行基类中带形参的构造函数来初始化基类数据时,派生类构造函数应在初始化列表中为基类构造函数提供参数。
3、作用域操作符(::)限定标识符,当派生类与基类有相同成员时:同名屏蔽************解决方法:
(1)、当派生类与基类有相同成员时,若未特别限定,则通过派生类的对象使用派生类的同名函数。
(2)、当派生类与基类有相同成员时,如果通过派生类的对象访问基类中隐藏的同名成员,应使用基类名和作用域操作符(::)来限定。
4、虚基类解决的问题:***********二义性(如果通过一个表达式能引用的成员不止一个),冗杂,冗杂导致的不一致性。
虚基类的引用:
应用于有共同基类的场合
声明:
以virtual修饰虚基类 class Derived:vityual public Base
虚基类的作用(从不同的路径继承过来的同名数据成员在内存中只有一个副本,同一个函数名也只有一个映射。):
(1)、主要用于解决虚基类多继承时可能发生的对同一基类继承多次而产生的二义性问题。
(2)、为最远的派生类提供唯一的基类成员,而不是重复多次拷贝。
注意:在第一继承时要将共同基类设计为虚基类。
设置虚基类后的程序:
#include<iostream>using namespace std;class Base0{public: int var0; void fun0() { cout<<"Member of Base0"<<endl; }};class Base1:virtual public Base0{public: int var1;};class Base2:virtual public Base0{public: int var2;};class Derived:public Base1,public Base2{public: int var; void fun() { cout<<"Member of Derived"<<endl; }};int main(){ Derived d; d.var0=0; d.fun0(); return 0;}运行结果:
Member of Base0Process returned 0 (0x0) execution time : 0.827 sPress any key to continue.5、有虚基类时的构造函数:
(1)、建立对象时所指定的类为最(远)派生类。
(2)、虚基类的成员是由最派生类的构造函数调用虚基类的构造函数进行初始化的。
(3)、在整个继承结构中,直接或间接继承虚基类中所有的派生类,都必须在构造函数的成员初始化表中给出对虚基类的构造函数的调用。如果未列出,则表示调用该虚基类的默认构造函数。
(4)、在建立对象时,只有最派生类的构造函数调用虚基类的构造函数,该派生类的其他基类对虚基类的构造函数调用被忽视。
对应的程序:
#include<iostream>using namespace std;class Base0{public: Base0(int var):var0(var){} int var0; void fun0() { cout<<"Member of Base0"<<endl; }};class Base1:virtual public Base0{public: Base1(int var):Base0(var){} int var1;};class Base2:virtual public Base0{public: Base2(int var):Base0(var){} int var2;};class Derived:public Base1,public Base2{public: Derived(int var):Base0(var),Base1(var),Base2(var){} int var; void fun() { cout<<"Member of Derived"<<endl; }};int main(){ Derived d(1); d.var0=2; d.fun0(); return 0;}运行结果:
Member of Base0Process returned 0 (0x0) execution time : 0.748 sPress any key to continue.
- 知识点——派生类生成过程——单继承的构造函数和析构函数
- 派生类生成过程——单继承的构造函数和析构函数
- 派生类生成过程——单继承的构造函数和析构函数(2)
- C++学习笔记(4)——派生类的构造函数和析构函数
- C++类和对象知识点整理五----派生类的构造函数和析构函数
- c++ 单继承派生类的构造函数
- 继承的三种方式与派生类的构造函数和析构函数~
- 第十一周阅读程序1:继承与派生类的构造函数和析构函数
- 多重继承中派生类的构造函数和析构函数
- 继承与派生3:派生类的构造函数与析构函数
- 【c++继承】继承关系中派生类对象构造函数和析构函数调用顺序
- 派生类的构造函数和析构函数和多继承中的二义性与虚函数
- 派生类的构造函数和析构函数
- 派生类的构造函数和析构函数
- 关于派生类的构造函数和析构函数
- 派生类的构造函数和析构函数
- 派生类的构造函数和析构函数
- C++派生类的构造函数和析构函数
- MSSqlserver 恢复sa密码及 删除builtin\administrators后恢复
- 网络直播监管趋严,主播们最终的出路在哪?
- Android WebView页面结束后视频播放还有声音问题处理
- 同步规范------生产者与消费者(二)
- hdu1394——Minimum Inversion Number(线段树求逆序数)
- 知识点——派生类生成过程——单继承的构造函数和析构函数
- 调用camera拍照指定路径后删除图库中存在的照片
- ubuntu 安装 kvm
- centos6.5安装 redmine安装脚本 3.3.0版本
- IntelliJ IDEA 创建spring mvc项目(图)
- idea出现的怪异现象
- spark sql on hive
- Intent & Intent Filters
- 关于树状数组一些有意思的东西