[C++]——继承赋值兼容规则与组合 (这一篇就够了!)

Posted FortunateJA

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了[C++]——继承赋值兼容规则与组合 (这一篇就够了!)相关的知识,希望对你有一定的参考价值。

继承

继承是C++中的特有属性,是类与类之间的一种关系。说到继承,就不得不提及两个概念:一个是父类(又称基类),一个是子类(又称派生类)。如同孩子继承父母的财产一样,子类会继承父类中的方法(函数)与成员。

为什么要有继承?

继承的本质是将父类的内容(函数与成员)继承到子类当中去,但子类不仅拥有父类内容还包含自己特有的内容(函数与成员)。
举个例子:人类可以吃穿住行,是一个大体的概念;学生是人类的一种具体体现,学生除了吃穿住行以外,还具备上学,学习,写作业等行为,此时利用继承实现一定程度上减少了代码的复用,但是打破了类的封装性。

继承是如何实现的?

在这里插入图片描述
代码示例:

class People
{
	public:
		......
	private:
		......	
}
class Student : public People
{	
	public:
		......
	private:
		......
}

注意: 父类中的私有成员或保护成员子类都不能直接访问,若要访问,需通过A的公有方法(公有函数)。
例如:
在这里插入图片描述
正确访问方式:
正确访问方式:
在这里插入图片描述
运行结果:在这里插入图片描述

赋值兼容规则

赋值兼容规则的内容

  1. 子类对象可以给父类对象赋值(向上转换)
  2. 子类地址可以赋给父类指针
  3. 子类对象可以初始化父类引用

在这里插入图片描述

为什么两个类型不同的变量可以实现赋值呢?(赋值兼容规则原理)

因为子类实例化一个对象时,子类对象不仅包含自己的成员还包含父类成员,详见下图:
在这里插入图片描述

继承中的特殊函数(友元函数、静态成员函数)

  1. 友元函数不能被继承
    举个生活中的例子,孩子可以继承父母财产,但不能继承父母朋友的财产。友元函数相当于父类的朋友,不能被继承。
  2. 静态成员函数在父类中定义,而且必须是公有方法;静态成员函数在类外初始化。

组合

组合和继承一样,都是C++中的特有属性。

什么是组合

A类作为B类的一个成员类型出现,就叫做组合。
举例如下:
在这里插入图片描述

组合的优缺点

优点:

  1. 容器类仅能通过被包含对象的接口来对其进行访问,封装性好 。
  2. 实现上的相互依赖性比较小
    每一个类只专注于一项任务。

缺点:

  1. 容易导致系统中的对象过多。
  2. 为了将多个不同的对象作为组合块来使用,接口定义需仔细。

以上是关于[C++]——继承赋值兼容规则与组合 (这一篇就够了!)的主要内容,如果未能解决你的问题,请参考以下文章

[C++]——继承赋值兼容规则与组合 (这一篇就够了!)

ES6解构赋值有这一篇就够了

spark中的pair rdd,看这一篇就够了

如何做 Nginx 安全日志分析可视化,看这一篇就够了~

C++ 继承与派生中的赋值兼容规则问题探究

C++ 继承与派生中的赋值兼容规则问题探究