Sirius' blog Sirius' blog
首页
  • 学习笔记

    • 《C++》
    • 《MATLAB》
    • 《Python》
  • 学习笔记

    • 《Git》
    • 《CMake》
  • 技术文档
  • 博客搭建
  • 学习
  • 友情链接
关于
收藏
  • 分类
  • 标签
  • 归档
GitHub (opens new window)

Sirius0v0

怕什么真理无穷,进一寸有一寸的欢喜
首页
  • 学习笔记

    • 《C++》
    • 《MATLAB》
    • 《Python》
  • 学习笔记

    • 《Git》
    • 《CMake》
  • 技术文档
  • 博客搭建
  • 学习
  • 友情链接
关于
收藏
  • 分类
  • 标签
  • 归档
GitHub (opens new window)
  • 基础

    • 程序的内存模型
    • CC++指针
    • CC++引用
    • CC++类与对象
    • CC++运算符重载
    • CC++继承
      • 继承方式
      • 继承同名成员处理方式
      • 多继承语法
      • 菱形继承
    • CC++多态
    • CC++文件操作
  • Cpp小记
  • C++学习笔记-220705-V1
  • 进阶

  • 奇思妙用

  • 库的使用

  • 《C++》学习笔记
  • 基础
Sirius0v0
2023-07-06
目录

CC++继承

# C/C++: 继承

语法:

// class 子类 : 继承方式 父类
class CppPage : public BasePage
{
}

# 继承方式

  • 公共继承
    • public -> public
    • protected -> protected
    • private 不可访问
  • 保护继承
    • public -> protected
    • protected -> protected
    • private 不可访问
  • 私有继承
    • public -> private
    • protected -> private
    • private 不可访问

父类中所有非静态成员都会被子类继承,私有成员被继承了,只是被隐藏访问不到

继承中先调用父类构造函数,在调用子类构造函数

# 继承同名成员处理方式

  • 访问子类同名成员,直接访问即可
  • 访问父类同名成员,需要加作用域
cout << "子类成员" << son.m_A << endl;
cout << "父类成员" << son.Base::m_A << endl;

调用同名成员函数同理。

同名静态成员处理方式,与非静态成员一样,其中不一样的见下方代码

// 通过类名访问静态成员
cout << "子类静态成员" << Son::m_A;
cout << "父类静态成员" << Base::m_A;
cout << "另一种父类静态成员访问方式" << Son::Base::m_A;

调用同名静态成员函数同理。

# 多继承语法

语法

// class 子类 : 继承方式 父类1, 继承方式 父类2
class CppPage : public BasePage, public BasePage2
{
}

# 菱形继承

存在如下情形,是一种菱形继承:

  • 父类:动物
    • 子类:羊
    • 子类:驼
      • 孙类:羊驼(多继承自羊和驼)

此时存在资源浪费的问题,即孙类继承了两份父类的资源。

为了解决这个问题,可以利用虚继承

class Animal{int m_age;};
class Sheep : virtual public Animal {};
class Tuo : virtual public Animal {};
class SheepTuo : public Sheep, public Tuo {};

在SheepTuo中会有两分别来自Sheep和Tuo类的vbptr(虚基类指针)指向vbtable(虚基类表),同时还有一个来自虚基类Animal的m_age。

在虚基类表中是存放有偏移量,两个vbptr均指向虚基类Animal的m_age,因而节省了资源。

// 虚继承后可以使用三种方式对资源进行访问
SheepTuo st;
st.Sheep::m_age = 1;
st.Tuo::m_age = 2;
st.m_age = 3;
编辑 (opens new window)
#Cpp
上次更新: 2023/08/09, 13:21:24
CC++运算符重载
CC++多态

← CC++运算符重载 CC++多态→

最近更新
01
ipopt优化库配置及使用
07-21
02
ubuntu离线安装包的方法
07-21
03
其它控件的使用
03-05
更多文章>
Theme by Vdoing | Copyright © 2020-2024 Sirius0v0 | MIT License
  • 跟随系统
  • 浅色模式
  • 深色模式
  • 阅读模式