C++中需重写无参纯虚read()时,已有同功能带参函数该如何处理?
问题解答
首先明确:你必须重写那个无参的纯虚函数read()——C++规定包含纯虚函数的类属于抽象类,派生类必须实现所有纯虚函数才能被实例化,否则无法创建该类的对象。
不过你不需要重复编写业务逻辑,直接在重写的无参read()里调用已有的带参版本即可,核心是给两个参数提供符合业务场景的默认值,示例代码如下:
// 重写基类的纯虚函数,必须加override关键字做编译检查 void read() override { // 根据你的实际场景传入默认参数,比如ROS2环境下的当前时间+默认周期 rclcpp::Time default_time = rclcpp::Clock().now(); rclcpp::Duration default_period = rclcpp::Duration::from_seconds(1.0); // 示例周期设为1秒 read(default_time, default_period); // 复用已实现的带参函数逻辑 }
额外注意两点:
- 重写时务必加上
override关键字,编译器会帮你校验函数签名是否和基类纯虚函数完全匹配,避免因参数、返回值不一致导致的隐式错误。 - 默认参数的取值要贴合你的实际业务需求,比如周期长度、时间基准等,不能随便填无效值。
内容的提问来源于stack exchange,提问作者Edvard
相关产品推荐
相关产品推荐

