从基类构造对象"dumb"
Construct object from "dumb" base class
我创建了一个标准结构的"智能变体"——系统提供了struct canmsg
,这种类型的数据是从can设备读取的,我经常处理这样的帧。
现在,为了更容易地处理它们,我创建了一个子类:class TCanFrame : public canmsg
。它没有任何额外的属性,但它有一堆方法——一个友好的构造函数,用于从头开始创建帧,命令和数据,getter和setter,用于读取和设置"上面的抽象层"的不同属性(例如,数据中编码的通道子地址)。
从struct canmsg_t
的实例构造TCanFrame类型的对象的最佳方法是什么?我可以做一个从&source
到this
的记忆吗?或者我需要一个字段一个字段地复制它?或者其他一些技巧,用"dumb"canmsg
创建一个整洁的TCanFrame实例,或者我可以让复制构造函数接受父类吗?
如果您不添加任何数据成员,也不需要访问canmsg
的任何受保护成员,我认为您不应该创建派生类。相反,您可以在定义canmsg
的命名空间中添加免费函数来执行额外的功能,然后将它们与普通的canmsg
对象一起使用。您可以在Scott Meyers和Herb Sutter的这些文章中了解更多关于类的"非成员接口"以及为什么它是一件好事。
还要注意,如果您确实创建了一个派生类,并且canmsg
没有虚拟析构函数,那么通过在实际上指向TCanFrame
对象的canmsg*
上调用delete
,您可以很容易地遇到未定义的行为。
您可以使用编译器提供的默认复制构造函数:
TCanFrame(const canmsg& msg) : canmsg(msg) {}
相关文章:
- 什么时候调用组成单元对象的析构函数
- 对RValue对象调用的LValue ref限定成员函数
- CMake-按正确顺序将项目与C运行时对象文件链接
- 空基优化子对象的地址
- 将对象数组的引用传递给函数
- 你能重载对象变量名本身返回的内容吗
- C++使用整数的压缩数组初始化对象
- 找不到成员对象:没有名为get_event()的成员,也处理多态性和向量
- 将对象移动到std::shared_ptr
- 代理对象的常量正确性
- 提升 ASIO 无法识别计时器对象
- 将Ref对象作为类成员
- 将包含C样式数组的对象初始化为成员变量(C++)
- 如何返回一个类的两个对象相加的结果
- 使用std::函数映射对象方法
- 是否需要删除包含对象的"pair"?
- 如何在自删除后将对象设置为nullptr
- 迭代时从向量和内存中删除对象
- 从基类构造对象"dumb"
- 使用 static_cast 处理混合(基础和派生)对象的向量是否存在性能风险?(又名 "it this a dumb idea?" )