【发布时间】:2018-05-14 18:14:59
【问题描述】:
我有以下类层次结构:
class Base
{
public:
virtual void DoA();
virtual void DoB();
virtual void DoC();
protected:
float m_x;
float m_y;
};
class DerivedA : public Base
{
public:
virtual void DoA() override;
virtual void DoB() override;
virtual void DoC() override;
};
class DerivedB : public Base
{
public:
virtual void DoA() override;
virtual void DoB() override;
virtual void DoC() override;
};
所有方法DoA(), DoB() ...仅对基类的成员进行操作,
其中一些可能会在其中调用基类方法。在运行时,我默认创建DerivedA 类型的对象,但我可能需要将其更改为DerivedB 或DerivedC。但是我发现通过复制DerivedA 的状态并再次初始化它来创建这些对象是没有用的。我认为解决方案可能是将DerivedA 转换为任何其他类型,但我不确定它是否安全以及它是否是一个好的设计。有意见吗?
【问题讨论】:
-
这是未定义的行为,您不能投射“侧面”
-
这既不安全也不是好的设计。
-
DerivedA和DerivedB有什么区别?从您的问题中听起来它们是相同的,但是没有理由存在不同的类。你能详细说明它们有何不同吗? -
我希望你阅读一本 C++ 初学者书籍和一些面向 OOP 设计的教程。你想实现的,这里实现的,好像不是c++可以用的方式。
-
这看起来像是一个 XY 问题。也许您应该让我们知道您想要达到的目标。