我正在考虑在C ++类继承的基础上实现跨不同应用程序版本的文件兼容性的可能性(例如:在 myapp 2.0 中打开从 myapp 1.0保存的文件) )。
例如,假设 myapp 1.0 具有:
class employee {
public:
char *mp_name;
unsigned int m_age;
(and all needed serialization methods)
}
接下来,您开发 myapp 2.0 ,该版本增加了对薪资的支持,但是您无需修改1.0中的类,而是派生了新的类:
class employee20: public employee {
public:
unsigned int m_salary;
(methods for creating employee20 from employee and viceversa)
(and all needed serialization methods)
}
使用这种机制,似乎可以轻松地从 myapp 2.0 中读取 myapp 1.0 文件,甚至能够从2.0版本中保存1.0文件,因为employee20
拥有从另一个版本创建另一个对象的方法。
但是,现在,假设您发布了 myapp 3.0 ,它放弃了对员工年龄的支持 ...
是否可以从派生类中删除继承的成员?
我的意思是,是否可以做这样的事情:
class employee30: public employee20 {
public:
void m_age;
(methods for creating employee30 from employee20 and viceversa)
(and all needed serialization methods)
}
也许没有办法做到这一点,它只是表明我应该放弃通过继承获得版本兼容性的想法?
答案 0 :(得分:0)
这不起作用,因为您将类设计与应用程序输入/输出混合在一起。他们是分开的。类继承用于定义内部对象。输入/输出用于外部应用程序数据。
一个好的方法是拥有一个saver / loader类。这样,数据便与实际实现脱钩。当事情发生变化时,保存/加载类是唯一的处理兼容性。