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

C++结构体与类:嵌入式开发者实战指南

C++在嵌入式系统中仍属小众选择,但当项目超越纯C的极限时,它成为首选语言。从C转型的开发者理解C结构体、C++类和C++结构体的细微差别至关重要。本文通过清晰示例和最佳实践建议揭示这些语言要素。

C语言中的结构体

C语言struct是聚合相关值的复合数据类型。可包含内置类型(如int、char)、位域或其他结构体。其目的是将逻辑相关的数据分组为单一对象。

struct coordinates { float x; float y; float z; };

编译器掌握struct coordinates布局,允许声明变量:

struct coordinates location;

使用点运算符访问字段:

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

虽可用三个单独float变量,但归为单一结构体简化函数参数传递并提升可读性。

位域赋予结构体独特能力:指定成员确切位宽,建模硬件寄存器时很有用。

struct bitreg { unsigned up: 3; unsigned down: 3; unsigned polarity: 2; };

struct bitreg变量通常占一字节,编译器自动生成掩码和移位代码。用法直观:

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

嵌入式硬件开发需注意两点:

在C中,结构体本质是被动容器;除访问字段外无法在其上调用行为。C++解决了这一限制。

C++中的类

C++引入class构造,将结构体理念扩展为可封装数据和行为的完整数据类型。类的实例称为对象。

类与C结构体语法共通,但提供强大特性:

示例:

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

数据成员a和b仅在类成员函数内可访问。构造函数和析构函数管理对象生命周期。函数体在别处用作用域解析运算符定义:

void myclass::fun() { // implementation }

C++中的结构体

C++也支持struct,完全兼容C并继承类的额外能力。唯一区别:成员默认公有,而类成员默认私有。

等价于前例,结构体可写为:

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

类与结构体的选择

采取纪律性方法:仅需被动数据容器时用struct,延续C风格。需封装、行为或继承时保留class。此约定提升代码可读性和可维护性——长期嵌入式项目的关键素质。

记住,清晰、自文档化的代码比巧妙技巧更有价值。未来维护者(甚至耐心有限者)会感谢你的一致风格。

嵌入式

  1. Nucleus RTOS信号量:实用服务与数据结构
  2. 掌握事件标志组:Nucleus RTOS/SE实用服务与数据结构
  3. 掌握 C++ 变量、字面量与常量:核心概念与实战指南
  4. C++类与对象:面向对象编程实战指南
  5. C++ 动态内存管理:new 与 delete 专家级实战指南
  6. C++ 三种继承方式深度解析:public、protected 与 private
  7. C++存储类别全解析:auto/register/static/extern/mutable作用域与生命周期
  8. C++日期时间完全指南:ctime库、tm结构体与格式化输出
  9. C++数据结构实战:结构体struct定义、访问、函数参数、指针与typedef别名
  10. C++重载机制深度解析:函数重载与运算符重载全攻略
  11. C++接口编程:抽象类与纯虚函数实现规范契约
  12. 精通 Java:理解对象、类与核心 OOP 概念