首页 > 编程语言 >【C++基础概念理解——类的继承和嵌套】

【C++基础概念理解——类的继承和嵌套】

时间:2024-09-14 18:51:02浏览次数:10  
标签:enum StateMachine 继承 作用域 InitialSetupProcedure C++ 嵌套 class

基本概念

在 C++ 中,类的继承和嵌套类的定义是两种不同的概念。

class InitialSetupProcedure : public StateMachine  //类的继承(符号是":")
class InitialSetupProcedure::StateMachine  //类的嵌套(符号是"::",意思是类StateMachine嵌套在InitialSetupProcedure类中)

这两个类,一个是继承自 StateMachine 的类,另一个是嵌套在 InitialSetupProcedure 类中的 StateMachine 类。让我们详细解释这两种情况。

  1. 继承自 StateMachine 的类
    假设有一个基类 StateMachine,然后你定义了一个类 InitialSetupProcedure 继承自 StateMachine
class StateMachine {
    // 基类 StateMachine 的定义
};

class InitialSetupProcedure : public StateMachine {
    // InitialSetupProcedure 类的定义
};

在这种情况下,InitialSetupProcedure 继承了 StateMachine 的所有成员和方法。

  1. 嵌套类 StateMachine
    嵌套类是定义在另一个类内部的类。在你的例子中,InitialSetupProcedure 类中嵌套了一个 StateMachine 类:
class InitialSetupProcedure {
public:
    class StateMachine {
        // 嵌套类 StateMachine 的定义
    };

    // InitialSetupProcedure 类的其他成员和方法
};

在这种情况下,StateMachineInitialSetupProcedure 类的一个成员类,它的作用域被限制在 InitialSetupProcedure 类的内部。

这两个类名一样会冲突吗?

这两种情况可以同时存在,因为它们在不同的作用域中。一个是全局作用域中的基类 StateMachine,另一个是 InitialSetupProcedure 类中的嵌套类 StateMachine。它们的定义和用途是独立的。

还有个比较类似的:

enum class State : uint8_t

在 C++11 及其后续版本中,引入了 enum class(也称为 “scoped enumeration”),它与传统的 enum有一些重要的区别和优势。

主要原因和好处
  • 作用域控制:

enum class 定义的枚举类型是强作用域的。这意味着枚举成员不会自动提升到外部作用域,必须通过枚举类型名称进行访问。
例如,State::idle 而不是 idle。这可以避免命名冲突。

  • 类型安全:

enum class 提供了更强的类型安全性。枚举值不会隐式转换为整数或其他类型,必须显式转换。这可以防止意外的类型错误。
例如,不能将 State::idle 直接赋值给一个整数变量,必须进行显式转换。

  • 底层类型指定:

enum class 允许指定底层类型(如 uint8_t),从而控制枚举的存储大小。这在需要优化内存使用时非常有用。
在例子中,State 的底层类型被指定为 uint8_t,这意味着每个枚举值将占用 1 个字节。

标签:enum,StateMachine,继承,作用域,InitialSetupProcedure,C++,嵌套,class
From: https://blog.csdn.net/XWWW668899/article/details/142264230

相关文章

  • stm32驱动HX711称重传感器 c++代码分享
    一、HX711模块介绍HX711模块是一种专门用于称重传感器的放大器模块。它的主要功能是将测得的微小电压信号放大到可以被微控制器读取的范围。HX711模块通常配合称重传感器一起使用,例如压力传感器、负载细胞等。它采用24位的模数转换器(ADC)来精确测量传感器的电压变化。HX711模块具......
  • C++ 顶层const底层const
    inti=0;int*constpl=&i;//不能改变p1的值,这是一个顶层constconstintci=42;//不能改变ci的值,这是一个顶层constconstint*p2=&ci;//允许改变p2的值,这是一个底层constconstint*constp3=p2;//靠右的const是顶层const,靠左的是底层constconstin......
  • c++临时对象导致的生命周期问题
    对象的生命周期是c++中非常重要的概念,它直接决定了你的程序是否正确以及是否存在安全问题。今天要说的临时变量导致的生命周期问题是非常常见的,很多时候没有一定经验甚至没法识别出来。光是我自己写、review、回答别人的问题就犯了或者看到了许许多多这类问题,所以我想有必要......
  • c++类和对象(3):默认成员函数(下)
    1.拷贝构造函数如果⼀个构造函数的第⼀个参数是自身类类型的引用,且任何额外的参数都有默认值,则此构造函数也叫做拷贝构造函数,也就是说拷贝构造是⼀个特殊的构造函数。c++规定:类类型的传值传参必须用拷贝构造1.1拷贝构造函数的特点1.拷贝构造函数是构造函数的⼀个重载......
  • 南沙C++noip老师解一本通题: 1360:奇怪的电梯(lift)
    ​【题目描述】大楼的每一层楼都可以停电梯,而且第i层楼(1≤i≤N)上有一个数字Ki(0≤=Ki≤=N)。电梯只有四个按钮:开,关,上,下。上下的层数等于当前楼层上的那个数字。当然,如果不能满足要求,相应的按钮就会失灵。例如:33125代表了Ki(K1=3,K2=3,……),从一楼开始。在一楼,按“上”可以到4......
  • 【关于c++模版类的报错问题】
    关于c++模版类的报错问题模版类的定义使用类模板模版类的定义通常在实现一个类时,会在.h头文件中声明函数,在.cpp文件中实现该函数。然而如果是模版类的话情况则会稍有不同。这是一个名为debug.h的头文件,里面包含了一个名为A的模版类类A的实现在debug.hpp中,模板类的......
  • C++STL~~stack&queue
    文章目录stack&queue的概念stack&queue的使用stack&queue的练习总结stack&queue的概念stack(栈)概念和特点栈是一种后进先出(LastInFirstOut,LIFO)的数据结构。就像一叠盘子,最后放上去的盘子最先被拿走。queue(队列)概念和特点队列是一种先进先出(FirstInFirstO......
  • PbootCMS嵌套调用栏目二级三级目录
    在PbootCMS中,可以通过特定的标签来嵌套调用多级目录。以下是如何使用这些标签来实现顶级、二级和三级目录的嵌套调用。1.顶级导航菜单列表调用{pboot:nav}<ahref="[nav:link]">[nav:name]</a>{/pboot:nav}说明:nav 标签用于调用顶级导航菜单列表。[nav:link] ......
  • C++——类与对象(三)
    目录引言类型转换1.类型转换2.explicit关键字static成员1.static静态成员变量2.static静态成员函数3.访问静态成员变量的方法3.1 静态成员变量为公有3.2静态成员变量为私有友元1.友元函数2.友元类内部类匿名对象对象拷贝时的编译器优化1.类型转换2.传值......
  • 《 C++ 修炼全景指南:九 》打破编程瓶颈!掌握二叉搜索树的高效实现与技巧
    摘要本文详细探讨了二叉搜索树(BinarySearchTree,BST)的核心概念和技术细节,包括插入、查找、删除、遍历等基本操作,并结合实际代码演示了如何实现这些功能。文章深入分析了二叉搜索树的性能优势及其时间复杂度,同时介绍了前驱、后继的查找方法等高级功能。通过自定义实现的......