继承-进阶

父子类成员共享

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

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

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

继承方式

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

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

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

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

赋值兼容转换

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

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

类似于截断

但不可以提升

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

类型转换会产生临时变量

int i;

char& ch=i//权限放大

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

与内置类型不一样

继承中的作用域

已知的域

父类子类同名成员

可以同时存在

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

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

选b  隐藏=重定义

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

派生类的默认函数

派生类默认构造:

父类成员:调用父类构造

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

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

默认拷贝构造:

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

子类内置:直接拷贝

子类自定义:调用拷贝

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

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

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

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

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

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

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

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

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

相关推荐

  1. 面向对象-继承

    2024-06-08 01:30:08       58 阅读

最近更新

  1. docker php8.1+nginx base 镜像 dockerfile 配置

    2024-06-08 01:30:08       94 阅读
  2. Could not load dynamic library ‘cudart64_100.dll‘

    2024-06-08 01:30:08       100 阅读
  3. 在Django里面运行非项目文件

    2024-06-08 01:30:08       82 阅读
  4. Python语言-面向对象

    2024-06-08 01:30:08       91 阅读

热门阅读

  1. 【C++】list模拟实现

    2024-06-08 01:30:08       22 阅读
  2. 瀚高数据库相关设置

    2024-06-08 01:30:08       31 阅读
  3. go 源码学习1:scanner学习

    2024-06-08 01:30:08       29 阅读
  4. Python怎么翻转:深度探索与技巧剖析

    2024-06-08 01:30:08       32 阅读
  5. 聚类层次【python,机器学习,算法】

    2024-06-08 01:30:08       30 阅读
  6. 数据结构:顺序栈

    2024-06-08 01:30:08       29 阅读
  7. 云计算导论(3)---分布式文件系统

    2024-06-08 01:30:08       31 阅读