抽象派生类
abstract derived class
我的组具有以下结构的代码
class Base
{
public:
float some_base_function();
};
class Derived : public Base
{
public:
float some_other_function();
float yet_another_function();
};
这很简单。问题是我目前正在考虑以一些实验性的方式重新实现Derived
。我的想法是这样做:
class IDerived : public Base
{
public:
virtual float some_other_function() = 0;
virtual float yet_another_function() = 0;
};
然后将旧Derived
更改为从IDerived
继承。这种具体的-->抽象-->具体的继承结构在C++中甚至被允许吗?
更糟糕的是,原始Derived
类在框架内持久化,因此它必须在内存中保持相同的结构(我希望通过使IDerived
抽象来实现)。新Derived
是否具有相同的内存布局?
这是合法的,但似乎你不需要它。额外继承的意义何在?
此外,Base
和 Derived
没有任何虚拟方法,因此通过添加任何方法,您可以 99% 确定内存布局不会相同。
是的,这是允许的。 但一般的做法是避免任何形式的具体基类(例如,参见Scott Meyers的更有效C++的第33项)。
试图通过存储二进制表示来持久化复杂对象必然会导致各种问题;我建议找到一种更好的机制(序列化等)。
相关文章:
- 为什么使用 "this" 指针调用派生成员函数?
- 具有奇怪重复模板模式的派生类中的成员变量已损坏
- 在派生函数中指定void*参数
- 如何通过派生类函数更改基类中的向量
- 如何委托派生类使用其父构造函数?
- 如何使用单独文件中的派生类访问友元函数对象
- 派生类销毁的最佳实践是什么
- 如何使用基类指针引用派生类成员
- 派生类是否可以在抽象工厂设计模式中具有数据成员
- 使用基类指针创建对象时,缺少派生类析构函数
- 如何引用基类的派生类?
- 存储模板类型以强制转换回派生<T>
- 需要从 istream 和 ostream 派生 iostream
- 在 C++ 中用派生类型重写成员函数
- 具有多个类、派生类的C++正向声明
- 有没有一种"cleaner"的方法可以在指向基的指针向量中找到派生类的第一个实例?
- 用常见虚拟函数实现的任意组合来实现派生类的正确方法是什么
- 如果基类包含双指针成员,则派生类的构造函数
- 为什么此派生对象无法访问基类的后递减方法?
- 有没有比在库中添加一个并非由所有派生类实现的新虚拟函数更好的设计实践