在C ++中使用类层次结构时应该避免向下转换吗?

时间:2011-01-11 12:34:48

标签: c++ inheritance downcast

假设我正在编写一个适用于项目的应用程序,并根据项目类型公开不同的功能。我有不同类型项目的类层次结构:

class AbstractProject
{
};

class ProjectA : public AbstractProject
{
};

class ProjectB : public AbstractProject
{
};

class ProjectC : public AbstractProject
{
};

现在,我计划将一个AbstractProject * _currentProject指针作为应用程序主类中的成员,在启动时弹出一个对话框并根据选择执行:

_currentProject = new ProjectB(); // e.g.

稍后,我将不得不向下转换指向特定类型的指针,以利用特定于不同Project的功能。不知怎的,这让我感到不安。有没有更好的方法呢?

4 个答案:

答案 0 :(得分:2)

是的,您应尽可能使用虚拟方法。

答案 1 :(得分:2)

更好的方法是在基类中定义纯虚方法,然后在派生类的重载中实现所有特定功能。然后调用该方法。

答案 2 :(得分:1)

命令和访客模式可能都适用于此处。你应该自己决定哪种更适合你的情况。

http://en.wikipedia.org/wiki/Command_pattern

http://en.wikipedia.org/wiki/Visitor_pattern

答案 3 :(得分:0)

在纯粹的OO中,您应该拥有像所有人建议的虚拟方法。但是,如果您仍然需要寻找特定的成员函数,请尝试使用其中一种设计模式,可能是命令或访问者甚至是装饰者...