假设我有这样的事情:如何避免C++为特定类方法强制转换?设计模式?
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!
这里主要的问题是要知道更好的方式,通过父亲的接口访问Son2具体方法。我想知道是否有设计模式来解决这个问题或其他方式。我不想做演员阵容,也不想在演讲中加入很多'if'。
问候,
爱德华
你的例子是有点做作,是否有可能使它更具体? – 2011-03-25 12:23:20
为了比@Coda更加明确,您使用的实际设计是什么,以便我们能够指出它的缺陷?如果你的设计没问题,那么'dynamic_cast'是你的朋友。通常,使用'dynamic_cast'是嗅到代码的标志。 – 2011-03-25 12:27:04
不要忘记添加虚拟析构函数到基类。否则,删除“Father * test = ...;删除测试;”不会调用正确的析构函数。 – 2011-03-25 12:36:21