C++学习笔记(四)继承

又是一个C++很重要的概念
一、定义:
(一)、继承:在定义一个新的类B时,如果该类与某个已有的类相似(B有A所有的特点),那么可以把A作为一个基类,而B作为基类的一个派生类。
(1)派生类是通过对基类进行修改和扩充得到的。派生类中可以扩展新的成员变量和成员函数。
(2)派生类定义后,可以独立使用,不依赖于基类
(3)派生类拥有基类的全部成员函数和成员变量。(不管是private,public,protected)
(4)在派生类的各个成员函数中,不能访问基类的private成员
二、使用方式

class 派生类名 :public 基类名
{
	.........;
};

注:派生类的体积等于基类的体积加上自己成员变量的体积,基类对象的存储位置位于派生类对象新增的成员变量前
三、继承关系与复合关系
(一)、继承:“是”关系
基类A,B是基类A的派生类
逻辑上要求:“一个B对象也是一个A对象”
(B对象包含A对象所有的特点)
(二)、复合:“有”关系:类A内有类B的的对象(封闭类)
逻辑要求:“B对象是A对象的固有属性或组成部分”
复合的一个小例子:狗和狗的主人
在这里插入图片描述
以上这个复合的使用是铁错的,循环定义是不允许的
在这里插入图片描述
四、派生类覆盖基类成员
派生类可以定义一个和基类成员同名的成员,这叫覆盖。在派生类中访问这类成员时,缺省的情况是访问派生类的成员,若访问基类定义的同名成员时,要用作用域符号::
注:一般基类和派生类不定义同名成员变量
五、类的保护成员:类比于private
protected可以让派生类的成员函数访问当前对象的基类保护成员
六、派生类的构造函数
与基类的构造函数由一些区别

class Father 
{
	private:
		int i,j;
	public:
		Father(int i,int j):i(i),j(j)
		{
		};
};
class son : public Father
{
	private:
		int k;
	public:
		son(int i, int j, int k):Father(i,j),k(k)
		{
		};
};

1、在创建派生类的对象时,需要调用基类的构造函数:初始化派生类对象从基类继承的成员。在执行一个派生类的构造函数前,先执行基类的构造函数
2、调用基类构造函数的两种方式
显式:就是上面例子的形式
隐式:派生类的构造函数中,省略基类构造函数时,派生类的构造函数则自动调用基类的默认构造函数。
3、派生类中包含其他对象

class Father 
{
	private:
		int i,j;
	public:
		Father(int i,int j):i(i),j(j)
		{
		};
};
class son : public Father
{
	private:
		int k;
		example e1,e2;  //example是一个类
	public:
		son(int i, int j, int k):Father(i,j),e1(***),e2(***),k(k)
		{
		};
};

创建派生类的对象:
1、先执行基类的构造函数
2、再执行封闭类的构造函数
3、再执行派生类自己的构造函数
消亡就反过来
七、public继承的赋值兼容规则:
(1)派生类的对象可以赋值给基类对象
(2)派生类对象可以初始化基类引用
(3)派生类对象的地址可以赋值给基类指针
注:派生方式若为private和protected以上不成立
1、protected继承时,基类的public和protected成员成为派生类的protected成员
2、private继承时。基类的public成员为private成员,基类的protected成员成为派生类的不可访问成员
这两种继承方式,逻辑上就不是“是”关系
八、直接基类传递与间接基类
1、派生类沿着类的层次自动向上继承它的间接基类
2、派生类的成员包括自己定义的成员,直接基类的成员,所有间接基类的所有成员
3、调用构造函数时,最先调用最初的基类的构造函数

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值