亿迅智能制造网
工业4.0先进制造技术信息网站!
首页 | 制造技术 | 制造设备 | 工业物联网 | 工业材料 | 设备保养维修 | 工业编程 |
home  MfgRobots >> 亿迅智能制造网 >  >> Industrial Internet of Things >> 嵌入式

C++ 中的结构和类

C++ 仍然是嵌入式开发的少数​​语言,但当项目变得太大而无法有效使用 C 时,开发人员通常会采用 C++。这些开发人员通常从 C 过渡到 C++,语言之间的细微差异代表了他们学习曲线的重要组成部分。 C++ 有结构,就像 C 一样,因为它们不一样。 C++ 有类,它们与结构非常相似。本文解开这些语言元素的细节。

C 中的结构

C 中的结构是自定义的复合数据项(对象),它可以从现有的内置数据类型 (int , 字符 等)、位域(指定位大小的整数)和其他结构。这个想法是聚合一些属于一起的数据项。例如,保存 3 维坐标的结构可能如下所示:

结构坐标{ float x;浮动 y;浮动 z;};

这段代码告诉编译器什么是结构坐标 好像。然后你可以继续声明这种类型的变量:

结构坐标位置;

变量位置 属于结构坐标类型 其内部字段可以使用“点”运算符寻址:

location.x =1.0;location.y =2.0;location.z =9.99;

当然,使用三个独立的 float 也可以达到类似的效果 名称类似于 location_x 的变量 等等 但是,处理位置要容易得多 作为可以传递给函数等的单个变量

包含位域的能力为结构提供了 C 中其他地方没有的能力。这是一个例子:

struct bitreg{ unsigned up:3;未签名:3;无符号极性:2;};

struct bitreg 类型变量中的每个字段 具有特定的位大小。编译器确保数据以合理的方式存储,因此我们希望这样的变量适合一个字节。此外,所有访问字节内字段的“位攻击”代码都是自动生成的。因此,程序员可以简单地访问它们:

struct bitreg 控制; control.up =1;control.down =2;control.polarity =3;

在大多数情况下,在 C 中使用结构非常简单,并且使代码更易于理解,并且不会影响执行效率。但是,嵌入式开发人员应该注意两点:

尽管 C 结构看起来有点像一种新的数据类型,但实际上并非如此。一个数据类型通常有一系列可以对其执行的操作;这不是 C 结构的情况。要对 C 结构执行任何操作,除了创建指向它的指针之外,您还需要访问内部字段。这个问题是在 C++ 中解决的。

C++ 中的类

C++ 语言具有许多面向对象的功能。其中之一是的概念 ,它可以描述更像新数据类型的东西。一个变量(通常称为对象 ) 可以实例化 从班级;即它是这种新类型的对象。

C++ 类具有与 C 结构几乎完全相同的语法和一些非常相似的功能。但是,有一些重要的区别:

本示例说明了其中大部分功能:

class myclass{ char a; int b;public:void fun();我的课(); ~myclass();}; myclass myobj; myobj.fun();

成员变量ab 只能被三个成员函数fun()访问 , myclass()~myclass() .后两个函数是构造函数和析构函数。只有好玩() 很可能被用户代码调用。所有三个函数的实际代码将在别处定义,使用 :: 与类相关联 运算符,因此:

void myclass::fun(){ ...

C++ 中的结构

除了类之外,C++ 还具有向后兼容 C 的结构。但是,C++ 结构还具有与类拥有的相同的附加功能。这只是 C++ 中结构和类之间的一个区别。正如我们所见,类中成员变量和函数的默认可访问性是私有的;结构中的默认值是公共的。因此,前面的类的功能也可以这样表达:

struct mystruct{ void fun();我的课(); ~myclass();private:char a; int b;};

在 C++ 中使用类和结构

获得这些信息后,我们敦促您不要过度利用它。当您需要额外的功能时,有很多原因只使用结构来实现它们在 C 和类中提供的功能类型。首先,这是代码可读性的问题。另一位开发人员可能对细节不太清楚,以“非标准”方式编写的代码会令人困惑。

编写代码时的一个关键优先事项是确保它是可读的(=可维护的)。有人——可能是你——可能需要在一年后查看这段代码并了解它的作用。一些建议:假设维护您代码的人是一名武装精神病患者,他的耐心有限,并且知道您的家庭住址。


嵌入式

  1. C++ 变量、文字和常量
  2. C++ 类和对象
  3. C++ 内存管理:新建和删除
  4. C++ 公共、受保护和私有继承
  5. 信号量:实用服务和数据结构
  6. 事件标志组:实用服务和数据结构
  7. Java - 对象和类
  8. C++ 中的存储类
  9. C++ 日期和时间
  10. C++ 数据结构
  11. C++ 重载(运算符和函数)
  12. C++ 中的接口(抽象类)