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

【CI130x 离在线】 C++一个类中调用另一个类的方法

有几种解决方案,根据你的具体需求选择:

方案1:传递CISerialPort对象引用(推荐)

在需要使用CheckConnection()的类中持有CISerialPort的引用:

cpp
// 在需要使用CheckConnection的类中
class MyOtherClass {
private:CISerialPort& serial_port_;  // 引用public:// 通过构造函数传入MyOtherClass(CISerialPort& serial_port) : serial_port_(serial_port) {}void SomeMethod() {if (serial_port_.CheckConnection()) {// 串口连接正常std::cout << "串口连接正常" << std::endl;} else {// 串口连接异常std::cout << "串口连接异常" << std::endl;}}
};// 使用示例
CISerialPort serial;
serial.Initialize("/dev/ttyUSB0", 115200);MyOtherClass other_class(serial);  // 传入串口对象
other_class.SomeMethod();

方案2:传递CISerialPort指针

cpp
class MyOtherClass {
private:CISerialPort* serial_port_;  // 指针public:MyOtherClass(CISerialPort* serial_port) : serial_port_(serial_port) {}void SomeMethod() {if (serial_port_ && serial_port_->CheckConnection()) {// 串口连接正常}}
};// 使用示例
CISerialPort serial;
MyOtherClass other_class(&serial);
other_class.SomeMethod();

方案3:使用单例模式(如果合适)

如果整个系统只需要一个串口实例:

cpp
// 在CISerialPort.h中修改
class CISerialPort {
private:static CISerialPort* instance_;  // 单例实例public:static CISerialPort* GetInstance() {if (!instance_) {instance_ = new CISerialPort();}return instance_;}// 原有方法保持不变bool CheckConnection();bool IsConnected() const;
};// 在CISerialPort.cpp中
CISerialPort* CISerialPort::instance_ = nullptr;// 在其他类中使用
class MyOtherClass {
public:void SomeMethod() {CISerialPort* serial = CISerialPort::GetInstance();if (serial->CheckConnection()) {// 使用串口}}
};

方案4:使用全局变量(简单但不推荐)

cpp
// 全局声明
extern CISerialPort g_serial_port;// 在其他类中使用
class MyOtherClass {
public:void SomeMethod() {if (g_serial_port.CheckConnection()) {// 使用串口}}
};

完整示例(推荐方案1)

MyOtherClass.h

cpp
#include "ci_serial_port.h"class MyOtherClass {
private:CISerialPort& serial_port_;public:MyOtherClass(CISerialPort& serial_port);void CheckAndUseSerial();void ProcessData();
};

MyOtherClass.cpp

cpp
#include "MyOtherClass.h"MyOtherClass::MyOtherClass(CISerialPort& serial_port) : serial_port_(serial_port) {
}void MyOtherClass::CheckAndUseSerial() {// 检查连接状态if (!serial_port_.CheckConnection()) {std::cerr << "串口连接异常,无法处理数据" << std::endl;return;}// 连接正常,继续处理ProcessData();
}void MyOtherClass::ProcessData() {// 读取串口数据auto data = serial_port_.ReadFromSerial();if (!data.empty()) {// 处理数据...}
}

main.cpp

cpp
#include "ci_serial_port.h"
#include "MyOtherClass.h"int main() {// 创建串口对象CISerialPort serial_port;// 初始化串口if (!serial_port.Initialize("/dev/ttyUSB0", 115200)) {return -1;}// 创建其他类对象并传入串口引用MyOtherClass processor(serial_port);// 使用while (true) {processor.CheckAndUseSerial();usleep(100000); // 100ms}return 0;
}

建议

  • 推荐方案1(传递引用):最安全,面向对象,易于测试

  • 如果多个地方需要访问同一个串口,考虑方案3(单例)

  • 避免方案4(全局变量),不利于代码维护和测试

选择哪种方案取决于你的具体架构设计。

http://www.jsqmd.com/news/46543/

相关文章:

  • ERP/MES与QMS的协同价值:为什么企业需要专业质量管理系统的深度解析
  • PostgreSQL技术大讲堂 - 第111讲:浅谈向量数据库pgvector的使用
  • 人大金仓kingbase数据库大小写敏感设置
  • 详细介绍:数据结构八大排序:堆排序-从二叉树到堆排序实现
  • 2025年11月最新推荐!云南旅游旅行社口碑排行榜权威发布,帮你选靠谱服务商避坑指南
  • 大企业数字化项目失败困局与破局之道
  • 2025年11月新推荐!云南旅游旅行社口碑排行榜,权威榜单助选靠谱服务商
  • 2025 年 11 月实木定制地板厂家推荐排行榜,纯实木地板,原木地板,定制木地板,多层实木地板,环保实木地板公司推荐
  • 评估质量管理软件(QMS)的试金石——试用、试用、还是试用!
  • 2025 年 11 月机床厂家推荐排行榜,数控机床,智能数控机床,双头对接机床,6150机床,线轨机床,硬轨机床,重型机床公司推荐
  • 2025 年 11 月硬轨机床厂家推荐排行榜:高刚性硬轨机床,重切削硬轨机床,精密硬轨机床,数控硬轨机床公司推荐
  • 重构lazarus时出现Error: linker: pipe: No such file or directory的解决方法
  • function sql的版本兼容性如何
  • Java 分哪些版本 都有什么不同
  • QMS软件评估:从制造企业实践看标准产品的多维评估框架
  • 2025 年 11 月重型机床厂家推荐排行榜,龙门铣床,落地镗铣床,数控立式车床,深孔钻镗床公司推荐,专业制造与高效加工口碑之选
  • 2025AI直播服务公司品质榜TOP5:智能交互技术,高清画质工艺解析
  • 2025年云南短视频制作公司品质榜单TOP5评测:AI协同生产流程,口碑数据拆解
  • 2025 年 11 月 6150 机床厂家推荐排行榜,普通车床,数控车床,精密机床,重型机床公司推荐,实力与口碑双重保障
  • 2025 年 11 月线轨机床厂家推荐排行榜,精密线轨机床,高速线轨机床,数控线轨机床,重型线轨机床公司推荐
  • 2025 年 11 月智能数控机床厂家推荐排行榜,高精度数控机床,多功能数控机床,自动化数控机床,高效数控机床公司推荐
  • 2025 年 11 月实木地热地板厂家推荐排行榜,纯实木地热地板,多层实木地热地板,环保地热地板,锁扣地热地板公司推荐
  • 自指生产力性格,自洽生产关系情调
  • 2025 年 11 月双头对接机床厂家推荐排行榜,双头对接机床,双头对接机床设备,双头对接机床厂家公司推荐
  • 【第7章 I/O编程与异常处理】C语言的“错误处理”与Python异常机制的核心区别
  • 深入理解Linux网络 读书摘要
  • 2025 年 11 月双头对接机床厂家推荐排行榜,双头对接机床,双头对接专用机床,高效双头对接机床公司推荐,精准高效稳定耐用!
  • 2025 年 11 月高端定制地板厂家推荐排行榜,实木定制地板,别墅专用地板,进口环保地板,工程定制地板公司推荐
  • 过程方法如何重塑企业DNA
  • vulnerable_docker_containement 靶机 - 实践