[C++]——继承赋值兼容规则与组合 (这一篇就够了!)
Posted FortunateJA
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了[C++]——继承赋值兼容规则与组合 (这一篇就够了!)相关的知识,希望对你有一定的参考价值。
文章目录
继承
继承是C++中的特有属性,是类与类之间的一种关系。说到继承,就不得不提及两个概念:一个是父类(又称基类),一个是子类(又称派生类)。如同孩子继承父母的财产一样,子类会继承父类中的方法(函数)与成员。
为什么要有继承?
继承的本质是将父类的内容(函数与成员)继承到子类当中去,但子类不仅拥有父类内容还包含自己特有的内容(函数与成员)。
举个例子:人类可以吃穿住行,是一个大体的概念;学生是人类的一种具体体现,学生除了吃穿住行以外,还具备上学,学习,写作业等行为,此时利用继承实现一定程度上减少了代码的复用,但是打破了类的封装性。
继承是如何实现的?
代码示例:
class People
public:
......
private:
......
class Student : public People
public:
......
private:
......
注意: 父类中的私有成员或保护成员子类都不能直接访问,若要访问,需通过A的公有方法(公有函数)。
例如:
正确访问方式:
运行结果:
赋值兼容规则
赋值兼容规则的内容
- 子类对象可以给父类对象赋值(向上转换)
- 子类地址可以赋给父类指针
- 子类对象可以初始化父类引用
为什么两个类型不同的变量可以实现赋值呢?(赋值兼容规则原理)
因为子类实例化一个对象时,子类对象不仅包含自己的成员还包含父类成员,详见下图:
继承中的特殊函数(友元函数、静态成员函数)
- 友元函数不能被继承
举个生活中的例子,孩子可以继承父母财产,但不能继承父母朋友的财产。友元函数相当于父类的朋友,不能被继承。 - 静态成员函数在父类中定义,而且必须是公有方法;静态成员函数在类外初始化。
组合
组合和继承一样,都是C++中的特有属性。
什么是组合
A类作为B类的一个成员类型出现,就叫做组合。
举例如下:
组合的优缺点
优点:
- 容器类仅能通过被包含对象的接口来对其进行访问,封装性好 。
- 实现上的相互依赖性比较小
每一个类只专注于一项任务。
缺点:
- 容易导致系统中的对象过多。
- 为了将多个不同的对象作为组合块来使用,接口定义需仔细。
以上是关于[C++]——继承赋值兼容规则与组合 (这一篇就够了!)的主要内容,如果未能解决你的问题,请参考以下文章