C++继承初识

一。继承

1.继承本质是复用相同的代码(属性)

2.格式:class 类名:继承方式 父类

3.继承方式的规律:

父类的:

对于私有成员,不管哪种继承方式都不可见--->不想被子类继承的成员

对于保护-->能子类内部直接用的(不管哪种继承都是)

对于公有-->公有继承让子类外部也能用

注意:不能直接访问,但可以通过父类提供访问方式(如getter,setter)间接访问

继承方式将比他访问权限大的变成他的访问权限,比他小的不变

子类的访问权限=min(父类访问权限,继承方式)

二。赋值兼容转换(或叫切割,切片)

注意:只限于子类父类是公有继承

子类 的对象能赋值给父类对象,指针,引用。

特点:没有类型转换--->没有产生临时变量,将子类满足的一部分给父类对象,指针,引用。

不同于:截断(高到低),提升(低到高)---->都是类型转换---->产生临时变量--->不能直接给引用指针(有引用和指针的常性)

三。继承中的域

已知的域:

局部域,全局域,命名空间域,类域。----->影响语法编译时的查找(直接指定域也可)

---->全局域和局部域影响生命周期,后两个内部无实体无生命周期概念

注意:继承后子类和父类是两个独立的域,编译时子类调先找子类再找父类。

例:子类和父类有同名成员(能同时存在,不同域)构成隐藏(重定义)而不是重载,函数名相同就是隐藏,且子类调用时直接在子类找到,不会去 父类找(编译时按照函数名找,符号表的链接时才去函数名修饰)

例:

下面哪个正确()

A.fun构成重载

B.fun构成隐藏

C.编译报错

D.运行报错

答案:B,C

继承后两个fun函数位于两个域,不构成重载,同名隐藏,编译时根据函数名找域内是否有这个函数名,以及参数检查,找到fun(int i),且这个域内没重载函数,(fun()被隐藏了),发现参数不对,编译时语法检查就报错了,而不是等到链接时根据被修饰的函数名找函数。(函数名修饰是符号表的概念)

--->继承子类父类最好不用同名函数,同名如果要调父类的要指定作用域为父类

四。继承的默认成员函数

角度:自定义类型,内置类型,父类成员(当成一个整体

对于子类:编译器自动生成的构造:调用父类的及自定义类型的默认构造

析构,拷贝构造同上。

构造,析构顺序:构造:强制保证先父类再子类

注意:强制要求使用父类的构造,而不是在初始化列表对父类成员一个一个初始化

实际初始化顺序不是初始化列表顺序,而是声明顺序(先父类再子类声明顺序)

目的:让子类再初始化列表调用父类的成员的值不会出错

析构:强制保证先子类再父类

1.在子类析构函数最后自动强制再调用父类析构,即如果在子类析构里调父类析构,最后还会再调。

2.直接调调不动父类析构:由于多态,析构函数名字编译器统一处理成destructor,构成隐藏。要指定作用域。

拷贝构造:

一般不需自己写,若涉及深拷贝,自己写(同)

深拷贝:将父类拷贝构造显式调用

自己写会自动调父类的拷贝构造/赋值运算符重载吗?不会,要自己显示调用。

自己写会自动调用父类的构造,析构(本身父类的部分就会自动初始化,析构)

赋值重载与拷贝构造类似。

总结:构造能显式调父类构造,析构不能显式调

(一定能保证先父后子,后者显式调用不能保证先子后父)

相关推荐
黑不溜秋的3 小时前
C++ 设计模式 - 策略模式
c++·设计模式·策略模式
Dream it possible!5 小时前
LeetCode 热题 100_在排序数组中查找元素的第一个和最后一个位置(65_34_中等_C++)(二分查找)(一次二分查找+挨个搜索;两次二分查找)
c++·算法·leetcode
柠石榴5 小时前
【练习】【回溯No.1】力扣 77. 组合
c++·算法·leetcode·回溯
王老师青少年编程5 小时前
【GESP C++八级考试考点详细解读】
数据结构·c++·算法·gesp·csp·信奥赛
澄澈天空7 小时前
C++ MFC添加RichEditControl控件后,程序启动失败
c++·mfc
Lzc7748 小时前
C++初阶——简单实现vector
c++·简单实现vector
一个小白18 小时前
C++——list模拟实现
开发语言·c++
程序员老舅9 小时前
C++ Qt项目教程:WebServer网络测试工具
c++·qt·测试工具·webserver·qt项目·qt项目实战
靡不有初1119 小时前
CCF-CSP第18次认证第一题——报数【两个与string相关的函数的使用】
c++·学习·ccfcsp
cookies_s_s10 小时前
Linux--进程(进程虚拟地址空间、页表、进程控制、实现简易shell)
linux·运维·服务器·数据结构·c++·算法·哈希算法