c++ - C++通过基类指针访问派生类成员

标签 c++ inheritance

有没有办法让通用代码通过基类指针访问派生类的成员?或者还有其他解决方法吗?

假设我有一个 Shape 类。我有继承它的 Square 和 Triangle 类。两者都有自己的私有(private)成员,彼此无关,因此将它们放在基类中毫无意义。 现在,如果我需要将类写入文件,但直到我需要将类写入文件时才知道该类是方形还是三角形怎么办?

我一直在想办法解决这个问题。最坏的解决方案是将 Square 和 Triangle 的数据写入一个文件,为读取和写入添加一个标识符(Triangle 或 Square),并在加载数据时让一个小型解析器将类放在一起。这将是低效和浪费时间的。

我想知道是否有一些技巧或设计模式或任何可以帮助解决这种情况的方法。

最佳答案

这个序列化应该使用虚函数来完成。在应序列化对象的基类中定义一个函数。三角形和正方形覆盖此函数并编写

  • 标识符
  • 所有应该序列化的数据

如果合适,您可以在基类中实现公共(public)部分。

当您想要加载文件时,您将需要创建与标识符对应的类实例的工厂方法。必须调用新的实例虚拟反序列化方法来加载实际数据。

关于c++ - C++通过基类指针访问派生类成员,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12265280/

相关文章:

c++ - 强制派生类而不再次实现纯虚拟

java - Intent 构造函数的上下文参数

c++ - 从模板化父类访问继承变量

c# - 如何声明一个继承自另一个抽象类的抽象泛型类?

c++ - 您如何使用 clang 的新自定义大小 int 功能?

c++ - fatal error LNK1104 : cannot open . lib (glloaD)

c++ - Qt 更新单个 XML 元素

c++ - std::accumulate() 只是复数 std::vector 的实部

c++ - 链接器未解析的外部符号 - 在 dll 中找不到函数

javascript - 当我调用 this.constructor.superclass.someMethod 时,超出最大调用堆栈大小会引发异常