Ⅳ 继承与派生①
时间:2020-04-16
本文章向大家介绍Ⅳ 继承与派生①,主要包括Ⅳ 继承与派生①使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。
1. 继承与派生的定义与实现
1.1 定义
1.1.1 概念
◼ 用已有类定义新类,新类拥有原有类的全部特征
▪ 原有类→基类(父类)
▪ 新类→派生类
◼ 可以多继承(一个派生类有多个基类)和多层派生(多层继承)
1.1.2 特点
新类可以继承原有类的属性和行为,并且可以添加新的属性和行为,或更新原有类的成员
◼ 优点:代码重用
1.2形状类的设计与实现
1.2.1 原思路(在上一篇已经发现了,太麻烦了,,ԾㅂԾ,,)
◼ 存在问题
①成员数据冗余
• CPoint2D center;
• ULONG color;
②成员函数冗余 //会重复好几次
• void Translate(float dx, float dy);
1.2.2 新思路
◼增加形状类(CShape)
1.2.3 基类的设计
■派生矩形类(其他以此类推)
1.3 派生类的特点
◼ 吸收基类成员(把需要重复的操作放到一起)
◼ 添加新成员(根据派生类的需要,增加新的数据成员和成员函数,以描述新的属性和行为。)(放在一起了之后得起个新名字吧~)
1.4 派生类的性质
◼ 继承关系是可以传递的:如类A派生出类B,类B又派生出类C,则类B是 类C的直接基类,类A是类B的直接基类,而类A称为类C的间接基类
◼ 继承关系不允许循环:在派生过程中,不允许类A派生出类B,类B又 派生出类C,而类C又派生出类A
2.继承的方式
2.1 公有继承(public)
2.2 私有继承(private)
2.3 保护继承(Protected)
◼ 基类的公有成员和保护成员被继承后作为派生类的保护成员
◼ 基类的私有成员在派生类中不能被直接访问
◼ 如果将派生类作为新的基类继续派生时,基类成员可以沿继承树继续传播
就只有一个区别。。
2.4 三种继承方式比较
3. 派生类的构造与析构
3.1 定义
3.2 构造与析构的调用顺序
#include <iostream> using namespace std; class memObj //成员类 { int a; public: memObj(int x) { a = x; cout << "Constructing member object " << a << endl; } ~memObj() { cout << "Destructing member object" << a << endl; } }; class base //基类 { memObj obj1; //成员类定义 public: base():obj1(1) //成员类的初始化 { cout << "Constructing base\n"; } ~base() //析构函数 { cout << "Destructing base\n"; } }; class derived: public base //继承 { memObj obj2; //成员类 public: derived():obj2(2) { cout << "Constructing derived\n"; } ~derived() { cout << "Destructing derived\n"; } }; int main() { derived ob; return 0; }
◼ 首先调用基类成员类构造函数
◼ 然后调用基类构造函数
◼ 再调用派生类成员类的构造函数
◼ 最后调用派生类构造函数
◼ 当派生类对象析构时,各析构函数的调用顺序正好相反
原文地址:https://www.cnblogs.com/syzyaa/p/12709420.html
- 图片上传预览js
- Isolation Forest算法实现详解
- css继承样式怎么控制?用选择器
- wordpress站内搜索结果页URL伪静态如何操作
- 如何实现大图居中超过的部分两边自动隐藏
- Ubuntu16.04安装后开发环境配置和常用软件安装
- wordpress如何屏蔽wp-json(禁用REST API)
- 贝叶斯系列——贝叶斯与其他统计流派的区别和联系
- bootstrap tab切换如何让鼠标移动自动切换内容
- css自动换行如何设置?url太长会撑开页面
- Histogram of Oriented Gridients(HOG) 方向梯度直方图
- 动态规划系列之最长递增子序列问题解答
- Git SSH Key 生成步骤
- 如何将wordpress所有文章批量改为已发布状态
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法
- 用一个图书库实例搞懂二分搜索树的底层原理
- 自已做动画及编写程序搞清楚最大堆的实现原理
- 一起来学演化计算-matlab基本函数strcmp num2str 字符串格式
- 一起来学matlab-matlab学习笔记8 基本绘图命令_1 图形窗口简介
- 根据barcode过滤bam文件
- biopython - 比较两个序列的相似性
- 使用阿里函数计算同步OSS增量对象到COS
- GitLab定时备份及恢复
- MySQL 的B+树索引.
- Spring全家桶的深入学习(一):Spring起步
- Spring的学习与实战
- kubernetes 安装笔记
- Spring的学习与实战(续)
- mycat数据库集群系列之数据库多实例安装
- 自已动手作图搞清楚AVL树