c++ 类的继承

c++ primer plus 笔记

类的继承

面向对象编程
目的
提供可以重用的代码;

类的组合

数据表示
类方法

类的继承方式

public

private

protected

链接: https://blog.csdn.net/chaipp0607/article/details/72190119?depth_1-utm_source=distribute.pc_relevant.none-task&utm_source=distribute.pc_relevant.none-task.

注意

在类外只能用共有成员访问protected和private部分的成员;
对于,外部世界来说,保护成员的行为与私有成员的行为相似;
对于派生类来说,保护成员的行为与公有成员相似;
最好对数据成员采用私有访问控制,不要使用保护访问控制,同时,通过基类方法使派生类能够访问基类数据;
对于成员函数来说,保护访问控制很有用,它让派生类能够访问公众不能使用的内部函数。

类继承的作用

扩展类
修改类
class derived:public base
{
.......
}

基类
派生类

派生类的构造函数

  1. 首先创建基类对象
  2. 派生类构造函数应该通过成员初始化列表将基类信息传递给基类构造函数(若不调用基类构造函数将使用默认的基类构造函数)
  3. 派生类构造函数应该初始化派生类新增的数据成员

(构造函数和复制构造函数的区别)

注意

创建派生类对象时,程序首先调用基类构造函数,然后再调用派生类构造函数;
基类构造函数负责初始化继承的数据成员;
派生类构造函数主要用于初始化新增的数据成员;
派生类的构造函数总是调用一个基类的构造函数;
可以使用初始化列表语法指明要使用的基类构造函数,否则将使用默认的基类构造函数;
派生类对象过期时,程序将首先调用派生类析构函数,然后再调用基类构造函数;

派生类构造函数使用初始化列表机制将值传递给基类的构造函数

derived::derived(type1 x,type2 Y):base(x,y)  //初始化列表
{
....
}
//derived 派生类
//base基类

派生类和基类的关系

基类指针可以在不进行显示类型转换的情况下指向派生类对象;

基类引用可以在不进行显示类型转换的情况下引用派生类对象;

基类指针和基类引用只能调用基类方法,不能调用派生类方法;

不可以将基类对象和地址赋给派生类引用和指针;

多态共有继承

同一个方法在派生类和基类中是不同的,即方法的行为取决于调用该方法的对象;

在派生类中重新定义基类的方法

使用虚方法

如果在派生类中重新定义基类的方法,通常将基类方法声明为虚的(有函数体);
这样,程序将根据**对象类型而不是引用类型来选择方法**;
通常为基类声明一个虚析构函数。
虚函数
关键字:virtual
关键字只用于类声明的方法原型中,而不用于方法定义中

抽象基类(Abstract base class,ABC)

纯虚函数(可以提供未实现的函数,也可以有函数体)

末尾声明处为=0
eg:virtual double Area() const =0;
用于两个类拥有一定的共性
eg:
Circle和Ellipse
	共同点:中心坐标和Move()方法(两个类相同)
			Area()方法(两个类不同)
注意
抽象基类必须至少包含一个纯虚函数
类声明中包含纯虚函数时,不能创建该类的对象;包含纯虚函数的类只能用作基类
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值