有两个基类具有相同的函数名.我想继承它们,并以不同的方式搭乘每种方法.如何使用单独的声明和定义(而不是在类定义中定义)?
#include <cstdio>
class Interface1{
public:
virtual void Name() = 0;
};
class Interface2
{
public:
virtual void Name() = 0;
};
class RealClass: public Interface1, public Interface2
{
public:
virtual void Interface1::Name()
{
printf("Interface1 OK?\n");
}
virtual void Interface2::Name()
{
printf("Interface2 OK?\n");
}
};
int main()
{
Interface1 *p = new RealClass();
p->Name();
Interface2 *q = reinterpret_cast<RealClass*>(p);
q->Name();
}
Run Code Online (Sandbox Code Playgroud)
我没能在VC8中移出定义.我发现Microsoft特定关键字__interface可以成功完成这项工作,代码如下:
#include <cstdio>
__interface Interface1{
virtual void Name() = 0;
};
__interface Interface2
{
virtual void Name() = 0;
}; …Run Code Online (Sandbox Code Playgroud) 我使用了VisualAssistX Implement Virtual Methods选项,它生成了:
class Base: public IBase
{
public:
Base(void);
~Base(void);
virtual void IBase::Foo();
Run Code Online (Sandbox Code Playgroud)
我注意到我可以省略IBase并编程仍然编译如下:
virtual void Foo();
Run Code Online (Sandbox Code Playgroud)
如果这是相同的代码?为什么VisualAssistX会插入IBase::?是否只是提高可读性的"代码风格"?
谢谢