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

C++ 快速回顾(一)

C++ 快速回顾(一)

  • 前言
  • 一、InLine 内联函数
  • 二、类继承的私有保护公开关系
    • Public
    • Protected
    • Private
  • 三、多继承、菱形继承、虚继承
    • 多继承
    • 菱形继承 和 虚继承


前言

用于快速回顾之前遗漏或者补充C++知识

一、InLine 内联函数

形式如下
在这里插入图片描述
需要注意内联函数体需要:简单、不能有循环或递归

二、类继承的私有保护公开关系

Public

公开继承基类,和我们正常认知一样

class TestBase
{
private:void FuncPrivate(){}
protected:void FuncProtected(){}
public:void FuncPublic(){}
};class TestChild01 : public TestBase
{void TestFunc() {FuncProtected();FuncPublic();}
};int main()
{TestChild01 test01;test01.FuncPublic();
}

Protected

protected 继承变成了TestChild01 的保护成员

class TestBase
{
private:void FuncPrivate(){}
protected:void FuncProtected(){}
public:void FuncPublic(){}
};class TestChild01 : protected TestBase
{void TestFunc() {FuncProtected();FuncPublic();}
};int main()
{TestChild01 test01;//test01.FuncPublic(); // protected 继承变成了TestChild01 的保护成员
}

Private

看下面的代码是看不出来private继承父类和保护继承有什么区别

class TestBase
{
private:void FuncPrivate(){}
protected:void FuncProtected(){}
public:void FuncPublic(){}
};class TestChild01 : private TestBase
{void TestFunc() {FuncProtected();FuncPublic();}
};int main()
{TestChild01 test01;
}

保护变成了TestChild01 的私有
公共也变成了TestChild01 的私有

class TestBase
{
private:void FuncPrivate(){}
protected:void FuncProtected(){}
public:void FuncPublic(){}
};class TestChild01 : private TestBase
{void TestFunc() {FuncProtected();FuncPublic();}
};class TestChild02 : public TestChild01
{void TestFunc() {//FuncProtected(); // 保护变成了TestChild01 的私有//FuncPublic(); // 公共也变成了TestChild01 的私有}
};int main()
{TestChild01 test01;
}

三、多继承、菱形继承、虚继承

多继承

总结一句话就是当接口去用即可,对具体的功能抽象

菱形继承 和 虚继承

轻易不要去写这种,但是要学会去看

class A
{
public:A(){printf("A Ctor.\r\n");}
};class B : public A
{};class C : public A
{};class D : public B, public C
{};int main()
{D d;system("pause");
}

输出结果如下,由于B、C都继承了A,D继承了B、C导致会触发两次A的构造
在这里插入图片描述
如下代码片段是菱形继承导致不知道调用谁的函数

class A
{
public:A(){printf("A Ctor.\r\n");}void TestFunc() {printf("TestFunc.\r\n");}
};class B : public A
{};class C : public A
{};class D : public B, public C
{};int main()
{D d;//d.TestFunc(); 不清楚要调用谁的  B的?C的?还是A的?system("pause");
}

使用虚继承可以解决上面的问题虚继承导致只有A的一份副本,只调用一次A的构造

class A
{
public:A(){printf("A Ctor.\r\n");}void TestFunc() {printf("TestFunc.\r\n");}
};class B : virtual public A
{};class C : virtual public A
{};class D : public B, public C
{};int main()
{D d;d.TestFunc();system("pause");
}

输出结果:
在这里插入图片描述

http://www.lqws.cn/news/511201.html

相关文章:

  • 学习记录:DAY33
  • linux操作系统的软件架构分析
  • Redis 分布式锁原理与实战-学习篇
  • 我的字节一面
  • DeepSeek智能总结 | 邓紫棋音乐版权纠纷核心梳理
  • Dify,FastGPT,RagFlow有啥区别,在智能问答方面有啥区别
  • 主机复制文字和文件到 Ubuntu 虚拟机
  • SEO与SEM:了解如何优化网站
  • NVME驱动分析
  • 2025湖北省职业院校技能大赛信息安全管理与评估样题
  • Unity3D仿星露谷物语开发70之背景音乐
  • 深度解析:2D写实数字人交互场景的创新与应用
  • 华为云Flexus+DeepSeek征文 | 基于ModelArts Studio、DeepSeek大模型和Dify搭建智能聊天助手
  • PostgreSQL(二十八)执行计划与单表查询成本估算
  • Git提交失败?commit hook:lint-staged
  • Handle本地部署
  • JVM的内存模型和内存结构
  • 模块化桌面机器人概念设计​​ - ModBot
  • 七天学会SpringCloud分布式微服务——01
  • Vue的学习内容和目标
  • 10-C#的dataGridView1和datatable的使用
  • vue 3 计算器
  • 用 Python 打造立体数据世界:3D 堆叠条形图绘制全解析
  • STM32学习笔记——中断控制
  • 利用大型语言模型增强边缘云 AI 系统安全性
  • wordpress无法将上传图片的原因和解决方法
  • windows系统中docker数据迁移出系统盘
  • uniapp/Vue/微信小程序瀑布流,小红书瀑布流,豆瓣瀑布流,淘宝瀑布流布局
  • IoTDB的基本概念及常用命令
  • RabbitMQ是什么?以及优缺点