类继承是否可跨应用程序版本兼容?

时间:2019-04-18 15:20:22

标签: c++ inheritance

我正在考虑在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)
}

也许没有办法做到这一点,它只是表明我应该放弃通过继承获得版本兼容性的想法?

1 个答案:

答案 0 :(得分:0)

这不起作用,因为您将类设计与应用程序输入/输出混合在一起。他们是分开的。类继承用于定义内部对象。输入/输出用于外部应用程序数据。

一个好的方法是拥有一个saver / loader类。这样,数据便与实际实现脱钩。当事情发生变化时,保存/加载类是唯一的处理兼容性。