【发布时间】:2010-02-23 11:10:28
【问题描述】:
更准确的代码版本是:
class SomeParam;
class IBase
{
public:
virtual void Func(SomeParam* param = NULL)
{
cout << "Base func";
}
};
class DerivedA : public IBase
{
public:
void Func()
{
//do some custom stuff
cout << "DerivedA func";
IBase::Func();
}
};
class DerivedB : public IBase
{
public:
void Func()
{
//do some custom stuff
cout << "DerivedB func";
IBase::Func();
}
};
//at somewhere else
void FuncCaller(IBase *instance1, IBase *instance2)
{
IBase *i1 = instance1;
IBase *i2 = instance2;
i1->Func();
i2->Func();
}
DerivedA *a = new DerivedA;
DerivedB *b = new DerivedB;
FuncCaller(a,b);
这给了我:
“基本功能”
“基础函数”
【问题讨论】:
-
按预期工作。请检查您是否正在编译正确的文件。
-
对我来说很好。你能发布你的实际代码吗?
-
我试图用 Visual Studio 2005 编译它,我得到了预期的输出:DerivedA funcBase funcDerivedB funcBase func。这是完全相同的代码吗?
-
@Drakosha、@Poita_、@Patrick - 我确实编辑了代码以删除一些空格,但有可能我搞砸了 - 你们中有人可以在 Taz 发布的原始版本中检查它吗?跨度>
-
只是一个旁注:我怀疑你称 'IBase' 'I' 是因为你认为它像一个接口,但一个接口应该只有纯虚拟方法。
标签: c++ inheritance function virtual