码农知识堂 - 1000bd
  •   Python
  •   PHP
  •   JS/TS
  •   JAVA
  •   C/C++
  •   C#
  •   GO
  •   Kotlin
  •   Swift
  • C++: 继承


    继承:是代码复用的一种手段, 可以在基类上进行拓展

    使用:

    1. class Person
    2. {
    3. int age;
    4. string name;
    5. };
    6. // 派生类 继承方式 基类
    7. class Student: public Person
    8. {
    9. int id;
    10. };

    继承的赋值兼容规则(切割)

    • 切片: 派生类对象可以直接赋值给基类对象
    • 基类对象不能赋值给派生类对象
    • 基类的指针,引用可以通过强转赋值给派生类的指针或引用(但必须基类的指针指向派生类对象,不然可能会产生越界)

    继承的作用域(隐藏)

    • 基类有基类的作用域, 派生类有派生类的作用域
    • 重定义(隐藏):子类成员屏蔽父类对同名成员的访问.(前提:不同作用域的同名函数), 但其仍在子类中,可以通过 基类:: 成员 显示的访问
      • 成员函数只要函数名相同就构成隐藏

    继承中的默认成员函数

    • 派生类中所包含的基类成员, 需要调用基类的构造,拷贝,赋值,析构
    • 构造函数: 调用基类的构造函数, 完成基类的初始化
      • 若基类没有默认构造函数, 在派生类的构造函数的初始化列表中,显示调用
    • 拷贝构造: 调用基类的拷贝构造, 完成基类的拷贝
    • 赋值:调用基类的赋值, 完成基类的赋值
    • 析构: 在调用完派生类的析构后, 自动调用基类的析构
      • 一些场景下,析构函数需要重写, 编译器析构函数名特殊处理: destrutor(), 所以父类的析构不加virtual的情况下, 与子类构成隐藏

    继承的种类

    • 单继承 : 同上
    • 多继承
    1. class A{
    2. int a;
    3. };
    4. class B{
    5. int b;
    6. };
    7. class C: public A, public C{
    8. int c;
    9. };

    • 菱形继承
    1. class A{
    2. int a;
    3. };
    4. class B : public A{
    5. int b;
    6. };
    7. class C : public A{
    8. int c;
    9. };
    10. class D : public B, public C{
    11. int d;
    12. };
    •  导致的问题: 二意性,  数据冗余

    •  解决:虚继承(虚基表): 通过指针, 指向了虚基表, 虚基表中存了偏移量能找到A
      • 继承的时候加上virtual就行
    1. class A{
    2. int a;
    3. };
    4. class B : virtual public A{
    5. int b;
    6. };
    7. class C : virtual public A{
    8. int c;
    9. };
    10. class D : public B, public C{
    11. int d;
    12. };

    • 继承与友元
      • 友元关系不能继承,也就是说基类友元不能访问子类私有和保护成员

    • 继承与静态成员
      • 基类定义了static静态成员,则整个继承体系里面只有一个这样的成员。

  • 相关阅读:
    PX4开发环境搭建--模拟器编译
    WPF中行为与触发器的概念及用法
    只要路由器有WPS按钮,佳能打印机连接到Wi-Fi网络的方法就很简单
    中国多元醇行业发展态势良好 重点关注海外市场
    《 前端挑战与未来:如何看待“前端已死”》
    高防CDN:构筑网络安全的钢铁长城
    idea开发 java web 酒店推荐系统bootstrap框架开发协同过滤算法web结构java编程计算机网页
    【附源码】Python计算机毕业设计汽车租赁网站
    【疯狂Java】数组
    jvm深入研究文档--java中的堆--详解!--jvm底层探索(1)
  • 原文地址:https://blog.csdn.net/m0_70402487/article/details/133777942
  • 最新文章
  • 攻防演习之三天拿下官网站群
    数据安全治理学习——前期安全规划和安全管理体系建设
    企业安全 | 企业内一次钓鱼演练准备过程
    内网渗透测试 | Kerberos协议及其部分攻击手法
    0day的产生 | 不懂代码的"代码审计"
    安装scrcpy-client模块av模块异常,环境问题解决方案
    leetcode hot100【LeetCode 279. 完全平方数】java实现
    OpenWrt下安装Mosquitto
    AnatoMask论文汇总
    【AI日记】24.11.01 LangChain、openai api和github copilot
  • 热门文章
  • 十款代码表白小特效 一个比一个浪漫 赶紧收藏起来吧!!!
    奉劝各位学弟学妹们,该打造你的技术影响力了!
    五年了,我在 CSDN 的两个一百万。
    Java俄罗斯方块,老程序员花了一个周末,连接中学年代!
    面试官都震惊,你这网络基础可以啊!
    你真的会用百度吗?我不信 — 那些不为人知的搜索引擎语法
    心情不好的时候,用 Python 画棵樱花树送给自己吧
    通宵一晚做出来的一款类似CS的第一人称射击游戏Demo!原来做游戏也不是很难,连憨憨学妹都学会了!
    13 万字 C 语言从入门到精通保姆级教程2021 年版
    10行代码集2000张美女图,Python爬虫120例,再上征途
Copyright © 2022 侵权请联系2656653265@qq.com    京ICP备2022015340号-1
正则表达式工具 cron表达式工具 密码生成工具

京公网安备 11010502049817号