【发布时间】:2014-03-04 15:10:57
【问题描述】:
我的接口层次结构如下:
class interface1
{
public:
virtual ~interface1() = 0;
}
class interface2 : public interface1
{
public:
virtual ~interface2() = 0;
}
我的数据模型具有可以从 Interface1 或 interface2 派生的类:
class cls1 : public interface1
{
}
class cls2 : public interface2
{
}
我想写一个在 interface1 或 interface2 上工作的重载函数
void function1(interface1 * obj)
{
// do something here
}
void function1(interface2 * obj)
{
// do something here
}
现在我想创建 cls1 和 cls2 的对象,并调用 function1:
{
.........
cls1 *p1 = new cls1;
cls2 *p2 = new cls2;
function1(p1);
function1(p2);
.........
}
我的问题是 - 在这两种情况下,总是调用 function1(interface1 * obj)。我不想将 if-else 与 dynamic_cast 结合使用(这是创建接口层次结构的重点)。 谁能建议我用 cls2 的对象调用 function1(interface2* obj) 的方法?
【问题讨论】:
-
在不相关的注释中,您的析构函数似乎缺少
virtual关键字。 -
我无法重现您的问题。应用了明显的修复但其他代码完全相同,gcc 使用适当的函数as expected(ideone.com)
-
@PaF:是的,谢谢!已更正!
标签: c++ inheritance casting