C++温故而知新----4

存疑概念:

提醒:

重要知识点:
第十三章 
13.1 一个简单的基类
13.1.1派生一个类
class 基类:public 子类{}
。使用共有派生,基类的共有成员将成为子类的公有成员
。私有部分也派生为子类的一部分,只能通过基类公有方法和保护方法访问

子类具有的特征
。子类对象储存来基类的数据成员
。派生类可以使用基类的方法

需要在继承中添加
。子类需要自己的构造函数
。派生类可以根据需要添加数据成员和方法

13.1.2构造函数:访问权限的考虑
。基类对象在程序进入派生类构造函数之前被创建
子类::子类(参数1,参数2...参数n):基类(参数1,参数2...参数n){}
若不显示调用基类构造函数,默认隐式调用基类无参构造函数

。将基类对象传递给子类构造函数,子类构造函数可以显示调用复制构造函数
子类::子类(基类对象):基类(基类对象){}

。释放对象的顺序与构造相反
首先执行子类析构函数,再执行基类析构函数

13.1.3使用派生类
13.1.4派生类和基类之间的特殊关系
。基类的引用和指针可以指向派生类,反之不行
。可以用派生类对象初始化基类(复制构造函数兼容)
Extend e = Extend();
Basic b0(e);
。可以将派生类对象赋给基类(赋值运算符函数函数兼容)
Basic b1;
b1 = e;

13.2继承:is-a关系
。公有继承使用is-a关系

13.3 多态公有继承
。virtual,若方法是通过引用或指针而不是对象调用,他将确定使用哪种方法
若无virtual修饰,程序将根据引用类型或指针类型选择方法
若有virtual修饰,程序将根据引用或指针指向的对象的类型选择方法

方法在基类中声明为虚,子类中奖自动生成虚方法

基类声明一个虚析构方法,确保按正确顺序调用析构函数
。为何需要虚析构函数
若不使用虚析构函数,则将只调用对应于指针类型的析构函数

13.4静态联编和动态联编
。编译过程中进行联编,静态联编
。程序运行时进行联编,动态联编
隐式向上强制转换使基类指针或引用可以指向子类对象(需使用虚函数)
13.4.2虚成员函数和动态联编
2.虚函数工作原理
给每个对象添加一个隐藏成员。保存来一个指向函数地址数组的指针,即虚函数表。
。基类虚函数表保存虚函数地址
。子类保存未修改的虚函数和被修改或新增的虚函数地址

13.4.3虚函数注意事项
。基类中声明的虚函数,在其所有子类中皆为虚函数(包括子类的子类)
。动态联编
。若定义的类将被作为基类,则应当将要在子类中重新定义的方法声明为虚

1.构造函数不能为虚
2.析构函数应当为虚
3.友元函数不能是虚函数
4.没用重新定义
函数将为基类版本或最新虚函数版本,例外情况是基类版本是隐藏的
5.重新定义将隐藏方法
重新定义继承方法不是重载,会隐藏继承方法

1.若重新定义继承方法,应确保与原来的原型完全一样,若返回值为基类引用或指针,则可以改成指向派生类的引用或指针(返回类型协变)
2.若基类声明被重载,则应在派生类中定义所有基类版本

13.5 访问控制:protected
派生类可直接访问基类protected方法

13.6 抽象基类
纯虚函数
原型后加=0,成为纯虚函数。
类声明包含纯虚函数,则不能创建对象

13.7 继承和动态内存分配
13.7.1第一种情况:派生类不使用new
。基类使用了动态内存分配
派生类不需要定义显示析构函数、复制构造函数、赋值运算符
。默认析构函数自动调用基类构造函数
。默认复制构造函数使用基类复制构造函数复制基类部分
。默认赋值运算符,自动使用基类的赋值运算符对基类组件进行赋值

*以上属性也适用于本身是对象的类成员
13.7.2第二种情况:派生类使用new
。派生类使用了new
必须为派生类定义显示析构函数、复制构造函数、赋值运算符
。析构函数
派生类析构函数自动调用基类析构函数
。复制构造函数
需要显示调用基类构造函数
hasDMA::hasDMA(const hasDMA &hs)
: baseDMA(hs)
{...}
。赋值运算符
hasDMA & hasDMA::operator=(const hasDMA &hs)
{
if(this == &hs)
return *this;
baseDMA::operator=(hs); //相当于*this = hs;
delete [] style;
style = new char[strlen(hs.style) + 1];
strcpy(style,rs.style);
return *this;
}
13.7.3使用动态内存分配和友元的继承
派生类访问基类友元
std::ostream & operator << (std::ostream &os,const hsaDMA &hs)
{
os << (const baseDMA &)hs;
os << "Style:" << hs.style <<endl;
return os;
}

13.8 类设计回顾
13.8.1编译器生成的成员函数
1.默认构造函数
2.复制构造函数
浅复制
3.赋值运算符
若成员是类,成员赋值时使用相应的类复制运算符
13.8.2其他的类方法
1.构造函数
不能被继承
2.析构函数应当为虚
对于基类,即使他不需要析构函数,也应该提供一个虚析构函数
3.转换
。使用一个参数就可以调用的构造函数,定义了从参数类型到类类型的转换
。要将类对象转换为其他类型,应定义转换函数
4.按值传递的对象与传递引用
5.返回对象和返回引用
6.使用const


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
完整版:https://download.csdn.net/download/qq_27595745/89522468 【课程大纲】 1-1 什么是java 1-2 认识java语言 1-3 java平台的体系结构 1-4 java SE环境安装和配置 2-1 java程序简介 2-2 计算机中的程序 2-3 java程序 2-4 java类库组织结构和文档 2-5 java虚拟机简介 2-6 java的垃圾回收器 2-7 java上机练习 3-1 java语言基础入门 3-2 数据的分类 3-3 标识符、关键字和常量 3-4 运算符 3-5 表达式 3-6 顺序结构和选择结构 3-7 循环语句 3-8 跳转语句 3-9 MyEclipse工具介绍 3-10 java基础知识章节练习 4-1 一维数组 4-2 数组应用 4-3 多维数组 4-4 排序算法 4-5 增强for循环 4-6 数组和排序算法章节练习 5-0 抽象和封装 5-1 面向过程的设计思想 5-2 面向对象的设计思想 5-3 抽象 5-4 封装 5-5 属性 5-6 方法的定义 5-7 this关键字 5-8 javaBean 5-9 包 package 5-10 抽象和封装章节练习 6-0 继承和多态 6-1 继承 6-2 object类 6-3 多态 6-4 访问修饰符 6-5 static修饰符 6-6 final修饰符 6-7 abstract修饰符 6-8 接口 6-9 继承和多态 章节练习 7-1 面向对象的分析与设计简介 7-2 对象模型建立 7-3 类之间的关系 7-4 软件的可维护与复用设计原则 7-5 面向对象的设计与分析 章节练习 8-1 内部类与包装器 8-2 对象包装器 8-3 装箱和拆箱 8-4 练习题 9-1 常用类介绍 9-2 StringBuffer和String Builder类 9-3 Rintime类的使用 9-4 日期类简介 9-5 java程序国际化的实现 9-6 Random类和Math类 9-7 枚举 9-8 练习题 10-1 java异常处理 10-2 认识异常 10-3 使用try和catch捕获异常 10-4 使用throw和throws引发异常 10-5 finally关键字 10-6 getMessage和printStackTrace方法 10-7 异常分类 10-8 自定义异常类 10-9 练习题 11-1 Java集合框架和泛型机制 11-2 Collection接口 11-3 Set接口实现类 11-4 List接口实现类 11-5 Map接口 11-6 Collections类 11-7 泛型概述 11-8 练习题 12-1 多线程 12-2 线程的生命周期 12-3 线程的调度和优先级 12-4 线程的同步 12-5 集合类的同步问题 12-6 用Timer类调度任务 12-7 练习题 13-1 Java IO 13-2 Java IO原理 13-3 流类的结构 13-4 文件流 13-5 缓冲流 13-6 转换流 13-7 数据流 13-8 打印流 13-9 对象流 13-10 随机存取文件流 13-11 zip文件流 13-12 练习题 14-1 图形用户界面设计 14-2 事件处理机制 14-3 AWT常用组件 14-4 swing简介 14-5 可视化开发swing组件 14-6 声音的播放和处理 14-7 2D图形的绘制 14-8 练习题 15-1 反射 15-2 使用Java反射机制 15-3 反射与动态代理 15-4 练习题 16-1 Java标注 16-2 JDK内置的基本标注类型 16-3 自定义标注类型 16-4 对标注进行标注 16-5 利用反射获取标注信息 16-6 练习题 17-1 顶目实战1-单机版五子棋游戏 17-2 总体设计 17-3 代码实现 17-4 程序的运行与发布 17-5 手动生成可执行JAR文件 17-6 练习题 18-1 Java数据库编程 18-2 JDBC类和接口 18-3 JDBC操作SQL 18-4 JDBC基本示例 18-5 JDBC应用示例 18-6 练习题 19-1 。。。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值