C++ 继承与派生

继承

面向对象语言的特性之一

定义

class A:public B{
	//A继承B类
}

逻辑上应满足:A具有B的全部特点,A“是”B,即派生类是基类。比如:男人是人,大学生是学生……

特点

(1)A继承B的所有成员,其存储体积等于基类对象体积+自己的成员变量的体积,可以看成是A对象“包含”了B对象;

基类对象的存储位置位于派生类对象新增的成员变量之前

(2)A不能访问B的私有成员,而是要通过B的成员函数来访问

覆盖

派生类中可以定义与基类中同名的成员(一般是函数)。

默认访问派生类中的成员,如果要访问基类的成员,要使用作用域符号::,比如

A a;
a.func();		//调用A中的func
a.B::func();	//调用基类中的func

派生类的构造函数

创建派生类对象时,要先调用基类的构造函数,以初始化从基类继承的成员变量

调用基类构造函数的两种方式

  • 显式调用:在派生类的构造函数中,为基类构造函数提供参数(初始化列表)
  • 隐式调用:调用基类的默认构造函数

注意:若基类定义了含参的构造函数,则不会自动生成缺省的无参构造函数,此时在派生类构造函数中必须给出参数

封闭派生类对象的构造函数调用顺序

若派生类中含成员对象,即其也是封闭类,则

先调用基类,再调用成员对象,最后调用派生类自己的构造函数。

析构函数顺序相反

public继承的赋值规则

派生类对象可以赋值给基类对象

  • 符合“逻辑”

派生类对象可以初始化基类对象引用

  • 同上

派生类对象地址可以赋值给基类指针

  • 因为派生类存储空间前面部分是基类成员,但是要注意指针范围

如果派生方式是private或protected,上述不成立

直接基类和间接基类

(套娃)

声明派生类时,只需列出直接基类,会自动继承上级所有成员

复合关系

“有”的关系,类C中有成员k,而k是类D的对象,则C和D是复合关系

在逻辑上应满足:D对象是C对象的固有属性或组成部分

与继承的区别

男人“是”人,男人和人是继承关系;圆“有”特殊的点(圆心),圆和点是复合关系

程序设计与算法(三)C++面向对象程序设计 https://www.bilibili.com/video/BV1Ns411n7ui?p=11

全部评论

相关推荐

09-14 14:42
门头沟学院 C++
旺旺米雪饼:举办了哥,你什么都没做错,全怪我那令人作呕的嫉妒和卑微的自尊心,看见你的文字我完全破防了,我直接丢盔弃甲了,看见你这图的那一秒,我满头大汗,浑身发冷,亿郁症瞬间发作了,生活仿佛没了颜色,像是被抓住尾巴的赛亚人,带着海楼石的能力者,抽离尾兽的人柱力,像是没了光的奥特曼,彻底断绝了生的希望。我几乎都快羡慕得疯了,倒在床上蒙住被子就开始抱着枕头尖叫流泪,嘴里一边喊着卧槽卧槽,一边又忍着,我边发边哭,打字的手都是抖的,后来我的手抖得越来越厉害,从心头涌起的思想、情怀和梦想,这份歆羡和悔恨交织在一起,我的笑还挂在脸上,可是眼泪一下子就掉下来了。求你了别发了,我生活再难再穷我都不会觉得难过,只有你们发这种东西的时候,我的心里像被刀割一样的痛,打着字泪水就忍不住的往下流。每天早上6点起床晚上11点睡觉,年复一年地学到现在,憧憬着一个月赚上万块的幸福生活,憧憬着美好阳光的未来。我打开了手机,看到你的图,我感到了深深的差距,我直接跳进了家门口的井里😭😭😭我真的😭我要嫉妒疯了😭为什么!!为什么这个人不是我😡我求你了😭求你了😭!不要在发了,我真的要羡慕嫉妒疯了😱怎么办我要嫉妒死了啊啊啊啊我急了,手机电脑全砸了,本来就有抑郁症的我,被别人说我破防了,我真的恼羞成怒了,仿佛被看穿了,躲在网络背后的我,这种感觉真的好难受,我被看穿的死死地,短短的破防两个字,我伪装出来的所有的坚强和强颜欢笑全都崩塌了,成了一个被人笑话的小丑🤡,我真的不想再故作坚强了,玩心态我输的什么都不剩😭😭😭
点赞 评论 收藏
分享
扭转乾坤_:现在企业都是学华为,一直通过丢池子里,最后捞
点赞 评论 收藏
分享
1 收藏 评论
分享
牛客网
牛客企业服务