传递对传感器的引用或在类中创建传感器对象

问题描述 投票:0回答:1

我正在使用此类作为传感器。 每个传感器都有多种功能(温度和湿度......)。 我需要访问传感器的输出值之外的一些属性。

class Sensor {
public:
    int id;
    int sensorTypeVal;
    const char* name; 
    SensorReading reading; 

    // Constructor to initialize Sensor with id, type, and name
    Sensor(int id, int type, const char* name)
        : id(id), sensorTypeVal(type), name(name) {} // Initialize reading with default constructor

    // Constructor to initialize Sensor with id, type, name, and a SensorReading
    Sensor(int id, int type, const char* name, const SensorReading& reading)
        : id(id), sensorTypeVal(type), name(name), reading(reading) {}

    // Method to update the sensor reading
    void updateReading(const SensorReading& newReading) {
        reading = newReading;
    }
};

对 C++ 相当陌生,所以想知道这里的正常方法是什么。 我发现了这个为什么我应该使用指针而不是对象本身? 这似乎比我的问题更上一层楼。 我不想进入传感器“包装”模式并开始跨层复制属性。 是否建议在 init 中将引用传递给传感器,或者将传感器对象移动到类内部并将其抽象出来?

或者还有其他的方式来组成吗?

c++ esp32 encapsulation
1个回答
0
投票

传感器是一个类,通常有一个库,其中“传感器” 创建如 Adafruit_AHTX0 aht;我也可以像这样创建一个参考 Adafruit_AHTX0& raht = aht;创建“传感器”是否更好? 主程序中类外的引用,或者有私有的 类中初始化 Adafruit_AHTX0 aht 的方法;

当您

Adafruit_AHTX0 aht;
创建类的Adafruit_AHTX0实例
时,即为该类分配内存,并且将调用默认构造函数。后者创建对类实例的引用(别名)
Adafruit_AHTX0.

创建类实例的位置取决于程序的需要,但如果有非常重要的影响:

    使用的内存和构造函数调用时序
全局/静态部分整个计划持续时间可跨程序访问(如果不是堆栈内存在封闭块内当输入块或函数时仅限于其功能/块。堆内存直到显式释放当 可通过指针访问。全局/静态部分在整个程序中持久化(仅初始化一次)区块第一次被执行仅限于其功能/块。全局/静态部分整个计划持续时间可通过程序访问。
范围 内存段 一生 构造函数调用 访问
全球 main()
开始之前
static
)。
本地(堆栈)
动态(堆) new
 被呼叫时
静态(本地)
静态(全局) main()
开始之前
小型嵌入式目标有其特定需求 - 也没有必要遵循“普通”大型计算机的最佳实践。这是一个非常广泛的话题,远远超出了一个简单的答案。

© www.soinside.com 2019 - 2024. All rights reserved.