c++ 学习总结报告(三)

组合与继承

一、组合
1、将一个类的对象作为另一个类的成员,被称作组合或包含。
class Engine{…};
class Wheel{…};
class Car{
Engine e;
Wheel wheels[4];
//…
};
2、复用类的实现
如果可以获得源码,修改其源代码。
应用组合,重新包装一个类对象,使之用于特定的环境。
二、继承
1、继承:在已有类的基础上创建新类的过程。 一个 B 类继承A类,或称从类 A 派生类 B。
被继承的已有类称为基类;继承得到的新类称为派生类;派生类可以再被继承,这样构成的层次结构称为继承层次。
2、类继承关系的语法形式
class 派生类名 : 基类名表
{
数据成员和成员函数声明
};
基类名表 构成
访问控制 基类名1, 访问控制 基类名2 ,… , 访问控制 基类名n
访问控制 表示派生类对基类的继承方式,使用关键字:
public 公有继承
private 私有继承
protected 保护继承
3、派生类的生成过程经历了三个步骤:
●吸收基类成员(全部吸收(构造、析构除外),但不一定可见)
●改造基类成员
●添加派生类新成员
4、基类的初始化
在创建派生类对象时用指定参数调用基类的构造函数来初始化派生类继承基类的数据。
派生类构造函数声明为
派生类构造函数 ( 变元表 ) : 基类 ( 变元表 ) , 对象成员1( 变元表 )
… 对象成员n ( 变元表 ) ;
构造函数执行顺序:基类 、 对象成员、派生类
5、派生类构造函数和析构函数的使用原则
  基类的构造函数和析构函数不能被继承;如果基类没有定义构造函数或有无参的构造函数, 派生类也可以不用定义构造函数;如果基类无无参的构造函数,派生类必须定义构造函数;如果派生类的基类也是派生类,则每个派生类只负责直接基类的构造;派生类是否定义析构函数与所属的基类无关。
6、多继承的派生类构造和访问
   多个基类的派生类构造函数可以用初始式调用基类构造函数初始化数据成员。执行顺序与单继承构造函数情况类似。多个直接基类构造函数执行顺序取决于定义派生类时指定 的各个继承基类的顺序。一个派生类对象拥有多个直接或间接基类的成员。不同名成员访问不会出现二义性。如果不同的基类有同名成员,派生类对象访问时应该加以识别。
派生类名(参数总表):基类名1(参数表1),基类名2(参数表2),…,基类名n(参数表n)
{
// 派生类新增成员的初始化语句
}
7、组合与继承的选择
  如果多个类共享数据而非行为,应该创建这些类可以包含的共用对象。如果多个类共享行为而非数据,应该让它们从共同的基类继承而来,并在基类里定义共用的操作。如果多个类既共享数据也共享行为,应该让它们从一个共同基类继承而来,并在基类里定义共用的数据和操作。如果想由基类控制接口,使用继承;如果想自己控制接口,使用组合。

虚函数与多态

1、多态性(Polymorphism)是指一个名字,多种语义;或界面相同,多种实现。 重载函数是多态性的一种简单形式。虚函数允许函数调用与函数体的联系在运行时才进行,称为动态联编。
  冠以关键字 virtual 的成员函数称为虚函数。
   实现运行时多态的关键首先是要说明虚函数,另外,必须用基类指针调用派生类的不同实现版本。
2、 虚函数和基类指针
一个虚函数,在派生类层界面相同的重载函数都保持虚特性;
虚函数必须是类的成员函数;
虚函数可以是另一个类的友元;
析构函数可以是虚函数,但构造函数不能是虚函数。
3、虚函数的重载特性
在派生类中重载基类的虚函数要求函数名、返回类型、参数个数、参数类型和顺序完全相同。
如果仅仅返回类型不同,C++认为是错误重载。
如果函数原型不同,仅函数名相同,丢失虚特性。
4、虚析构函数
   构造函数不能是虚函数。建立一个派生类对象时,必须从类层次的根开始,沿着继承路径逐个调用基类的构造函数。
  析构函数可以是虚的。虚析构函数用于指引 delete 运算符正确析构动态对象 。
5、纯虚函数和抽象类
   纯虚函数是一个在基类中说明的虚函数,在基类中没有定义, 要求任何派生类都定义自己的版本。纯虚函数为各派生类提供一个公共界面。一个具有纯虚函数的基类称为抽象类。
纯虚函数说明形式:
virtual 类型 函数名(参数表)= 0 ;

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值