当前位置: 首页 > news >正文

继承-进阶

父子类成员共享

普通成员对象/父子间不共享, 成员独立

函数成员共享(函数不存储在对象中)

子类由两部分构成:父类中继承的成员和子类中新定义成员

继承方式

子类中存在父类private成员但不可直接访问(及时在类中),只能通过从父类继承的函数访问

子类不能访问父类私有成员,但可以通过父类成员函数直接使用,

派生类定义时,不写继承方式,派生类是struct默认public,是class则私有

实践中继承方式几乎都是公有继承

赋值兼容转换

指针只指向子类中的父类部分

引用只引用子类中父类部分

类似于截断

但不可以提升

普通截断实质就是类型转换

类型转换会产生临时变量

int i;

char& ch=i//权限放大

但赋值兼容转换不产生临时变量

与内置类型不一样

继承中的作用域

已知的域

父类子类同名成员

可以同时存在

子类会隐藏父类同名成员(也叫做重定义)

同一域不能有同名变量,但父类子类成员成员不在同一域

选b  隐藏=重定义

函数重载,前提在同一作用域

派生类的默认函数

派生类默认构造:

父类成员:调用父类构造

子类内置:初始化为0或不处理(取决编译器)

子类自定义类型:调用构造

默认拷贝构造:

父类成员:调用父类拷贝构造

子类内置:直接拷贝

子类自定义:调用拷贝

其他默认函数也同样,对父类成员的操作通过复用父类函数完成

自定义析构不显式调用父类析构

自定义析构不显式调用父类析构:子类析构结束后会自动调用父类析构,且不能显示调用析构(为了保证父子的析构顺序)

因为派生类与父类析构函数会构成隐藏关系(析构函数名称都会被处理成destructer,同名)

除析构外其他函数都要显式调用父对应函数

构造顺序:编译器固定先基类中的成员,后派生类新增成员,与成员初始化列表无关

所以构造时,可以子用父(的成员来初始化),不能父用子

派生类初始化列表不能显式初始化基类成员,只能通过父类构造

默认构造只能调派生类的无参构造

http://www.lryc.cn/news/366177.html

相关文章:

  • 探索k8s集群的配置资源(secret和configmap)
  • 如何设置vue3项目中默认的背景为白色
  • MS1112驱动开发
  • K8s存储对象的使用
  • 构建自动化API数据抓取系统
  • 【Qt知识】部分QWidget属性表格
  • 【ARM64 常见汇编指令学习 19.1 -- ARM64 跳转指令 b.pl 详细介绍】
  • WWDC24即将到来,ios18放大招
  • C#中的空合并运算符与空合并赋值运算符:简化空值处理
  • 数据结构:哈夫曼树及其哈夫曼编码
  • 微信如何防止被对方拉黑删除?一招教你解决!文末附软件!
  • jar增量打包
  • 智慧医院物联网建设-统一管理物联网终端及应用
  • Debian的常用命令
  • 矩阵1-范数与二重求和的求和可交换
  • Python笔记 - *args和**kwargs
  • 微信小程序实现图片转base64
  • os和os.path模块
  • 链表题目练习----重排链表
  • 【杂记-浅谈XSS跨站脚本攻击】
  • VMware虚拟机与MobaXterm建立远程连接失败
  • mysql undolog管理
  • 【Linux】进程2——管理概念,进程概念
  • 【C++】植物大战僵尸杂交版自动存档——防闪退存档消失
  • 通过Excel,生成sql,将A表数据插入B表
  • 如何在MySQL中实现upsert:如果不存在则插入?
  • MyBatis中 set标签
  • mysql自带分页
  • 小学一年级数学上册,我终于学完了
  • 使用wireshark分析tcp握手过程