c++ 类的继承与派生
一、基本概念
#include <iostream> #include <time.h> using namespace std;class B1 { public:B1(int i){cout<<"constructing B1 "<<i<<endl;} };class B2 { public:B2(int j){cout<<"constructing B2 "<<j<<endl;} };class B3 { public:B3(){cout<<"constructing B3"<<endl;} };class C: public B2, public B1, public B3 { public:C(int a, int b, int c, int d):B1(a), memberB2(d), memberB1(c),B2(b){} private:B1 memberB1;B2 memberB2;B3 memberB3; };int main() { C obj(1,2,3,4);return 0; }
#include <iostream> #include <time.h> using namespace std;class B1 { public:B1(int i){cout<<"constructing B1 "<<i<<endl;}~B1(){cout<<"destructing B1"<<endl;} };class B2 { public:B2(int j){cout<<"constructing B2 "<<j<<endl;}~B2(){cout<<"destructing B2"<<endl;} };class B3 { public:B3(){cout<<"constructing B3"<<endl;}~B3(){cout<<"destructing B3"<<endl;} };class C: public B2, public B1, public B3 { public:C(int a, int b, int c, int d):B1(a), memberB2(d), memberB1(c),B2(b){} private:B1 memberB1;B2 memberB2;B3 memberB3; };int main() { C obj(1,2,3,4);return 0; }
#include <iostream> #include <time.h> using namespace std;class B1 { public:int nV;void fun(){cout<<"member of B1 "<<nV<<endl;} };class B2 { public:int nV;void fun(){cout<<"member of B2 "<<nV<<endl;} };class D1: public B1, public B2 { public:int nV;void fun(){cout<<"member of D1 "<<nV<<endl;} };int main() { D1 d1;d1.nV = 1;d1.fun();d1.B1::nV = 2;d1.B1::fun();d1.B2::nV = 3;d1.B2::fun();return 0; }
#include <iostream> #include <time.h> using namespace std;class B0 { public:int nV;void fun(){cout<<"member of B0 "<<nV<<endl;} };class B1:public B0 { public:int nV1; };class B2:public B0 { public:int nV2; };class D1:public B1, public B2 { public:int nVd;void fund(){cout<<"member of D1"<<endl;} };int main() { D1 d1;d1.B1::nV = 2;d1.B1::fun();d1.B2::nV = 3;d1.B2::fun();return 0; }
#include <iostream> #include <time.h> using namespace std;class B0 { public:int nV;void fun(){cout<<"member of B0 "<<nV<<endl;} };class B1:virtual public B0 { public:int nV1; };class B2:virtual public B0 { public:int nV2; };class D1:public B1, public B2 { public:int nVd;void fund(){cout<<"member of D1"<<endl;} };int main() { D1 d1;d1.nV = 2;d1.fun();return 0; }
#include <iostream> #include <time.h> using namespace std;class B0 { public:B0(int n){nV = n;}int nV;void fun(){cout<<"member of B0 "<<nV<<endl;} };class B1:virtual public B0 { public:B1(int a):B0(a) {}int nV1; };class B2:virtual public B0 { public:B2(int a):B0(a){}int nV2; };class D1:public B1, public B2 { public:D1(int a):B0(a), B1(a), B2(a){}int nVd;void fund(){cout<<"member of D1"<<endl;} };int main() { D1 d1(1);d1.nV = 2;d1.fun();return 0; }
才是真正的调用了B0构造函数。
#include <iostream> #include <time.h> using namespace std;class B0 { public:void display(){cout<<"B0::display()"<<endl;} };class B1:public B0 { public:void display(){cout<<"B1::display()"<<endl;} };class B2:public B0 { public:void display(){cout<<"B2::display()"<<endl;} };void fun(B0 *ptr) {ptr->display(); }int main() { B0 b0;B1 b1;B2 b2;fun(&b0);b0 = b1;fun(&b0);b0 = b2;fun(&b0);return 0; }
输出结果为:
B0::display()
B0::display()
B0::display()
通过这种赋值兼容后,每次调用的同名函数都是基类的同名函数,如果想调用派生类的,则需要使用虚函数。
c++ 类的继承与派生相关推荐
- 类的继承和派生java_类的继承和派生
一.类的继承和派生定义. 继承:保持已有类的特性而构造新类的过程称为继承. 派生:在已有类的基础上新增自己的特性而产生新类的过程称为派生. 被继承的已有类称为基类. 派生出的新类称为派生类. 二.继承 ...
- 模块的封装之C语言类的继承和派生
[交流][微知识]模块的封装(二):C语言的继承和派生 在模块的封装(一):C语言的封装中,我们介绍了如何使用C语言的结构体来实现一个类的封装,并通过掩码结构体的方式实 现了类成员的保护.这一部分,我 ...
- C++类的继承与派生
文章目录 一.继承 二.基类和派生类 三.继承方式 六.多继承 七.应用经验 八.课后作业 九.版权声明 一.继承 继承是面向对象程序设计中最重要的一个概念.继承允许我们根据一个类来定义另一个类,达到 ...
- C++语言类的继承与派生介绍和示例
继承 继承是面向对象程序设计中最重要的一个概念.继承允许我们根据一个类来定义另一个类,达到了代码功能重用效果. 当创建一个类时,如果待创建的类与另一个类存在某些共同特征,程序员不需要全部重新编写成员变 ...
- 实验四 类和对象;类的继承和派生;多态性; 接口;构造器应用
实验四 类和对象:类的继承和派生:多态性: 接口:构造器应用 一.实验目的 1. 掌握类与对象的关系: 2. 掌握类的定义: 3. 掌握对象的声明及使用: 4. 掌握构造方法的概念及调用时机: 5. ...
- 【C++进阶知识】C++类的继承和派生
目录 C++进阶知识系列文章 C++类的继承和派生 基本语法 访问修饰符 构造函数和析构函数 覆盖父类的方法 虚函数和纯虚函数 示例代码 参考资料 C++进阶知识系列文章 C++类的继承和派生 在面向 ...
- python 钻石继承_python3--object类,继承与派生,super方法,钻石继承问题
python3--object类,继承与派生,super方法,钻石继承问题 发布时间:2018-04-13 20:38:05编辑:Run阅读(1914) 昨天内容复习 组合:什么有什么的关系(例:老师 ...
- c 自定义实现string类 clear_CC++语言15|类的继承和派生实现代码重用、扩充
在C++中,继承是一个对象自动获取其父对象的所有属性和行为的过程.通过继承,您可以重用,扩展或修改在其他类中定义的属性和行为.通过继承,可以实现函数重写以及多态. 在C++中,继承另一个类的成员的类称 ...
- PTA 6-1 类的继承和派生
本题实现类的额继承和派生.已经给出相关的数据结构和类的声明,要求实现类的相关函数,为保证比较的结果,所有的数据均以int类型(除了PI取3.14外),程序运行时,输入一个点p的坐标x和y,接着是圆的中 ...
最新文章
- 37_04_awk入门进阶
- SQL Server 重置SA密码语句
- 敲山震虎?继MongoDB之后,AWS又对Elasticsearch下手了
- 由浅入深:自己动手开发模板引擎——置换型模板引擎(一)
- 手动为 SAP Spartacus 添加 SSR 支持的步骤
- Workaround for Search for my account in MyAppointment
- 4G DTU使用教程
- mysql控制台教程视频教程_mysql 控制台操作
- q7goodies事例_Java 8 Friday Goodies:本地交易范围
- mysql删除外键_MySQL删除外键定义的方法
- Gartner:2020年数据与分析领域的十大技术趋势
- C语言 - 数组作为参数传递给函数(按值传递和按引用传递)
- JavaScript—从数组的indexOf方法深入——Object的Property机制。
- 百度离线地图JS API V3.0
- tolua unity 报错_Unity3D热更新技术点——ToLua(上)
- 1_绪论 分布式机器学习
- 干货!图像集分类大杀器--混合黎曼度量学习
- 【微信小程序】企业付款接口
- 统计学习三要素个人理解
- IATF16949认证辅导,IATF16949涵盖汽车行业特定要求和辅导工具以及再整个供应链中减少变差和浪费的质量管理体系
热门文章
- 在VS2012中安装使用cppcheck
- mysql Expression #1 of ORDER BY clause is not in GROUP BY clause and contains nona
- Django:ORM关系字段
- .NET错误:未找到类型或命名空间名称
- Java WEB之Servlet学习之路(一)一个最简单的Servlet应用
- 软件测试作业4:测试要素
- JPEG原理分析及JPEG解码器的调试
- 【数据结构与算法】之深入解析“二叉树的中序遍历”的求解思路与算法示例
- 2018年第九届蓝桥杯 - 省赛 - C/C++大学B组 - F.递增三元组
- Java中集合(七)Collections 一个操作集合的工具类