【发布时间】:2011-03-25 12:15:04
【问题描述】:
假设我有这样的事情:
class Father {
public:
virtual int genericMethod (void) =0;
};
class Son1: public Father {
public:
int genericMethod ()
{ }
};
class Son2: public Father {
public:
int genericMethod ()
{ }
int specifClassMethod()
{ }
};
我主要做以下事情:
Father * test = new Son2();
test->specifClassMethod(); //Can't do this! It is specific of Class Son2 and is not a virtual method in class Father!
这里的主要问题是知道通过Father接口访问Son2特定方法的更好方法。我想知道是否有设计模式可以解决这个问题或其他方式。我不想做演员表,也不想在我的代码中放很多“如果”。
问候,
爱德华多
【问题讨论】:
-
你的例子有点做作,能不能说的更具体一点?
-
为了比@Coda 更明确,您使用的实际设计是什么,以便我们指出其中的缺陷?如果你的设计没问题,那么
dynamic_cast就是你的朋友。通常,使用dynamic_cast是嗅到代码的标志。 -
不要忘记在基类中添加虚拟析构函数。否则删除“Father* test = ...; delete test;”不会调用正确的析构函数。
标签: c++ inheritance casting design-patterns