相关疑难解决方法(0)

继承共享方法名称的接口

有两个基类具有相同的函数名.我想继承它们,并以不同的方式搭乘每种方法.如何使用单独的声明和定义(而不是在类定义中定义)?

#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)

c++ gcc multiple-inheritance visual-c++

56
推荐指数
3
解决办法
3万
查看次数

"virtual void IBase :: Foo"和"virtual void Foo"之间有什么区别?

我使用了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::?是否只是提高可读性的"代码风格"?

谢谢

c++ visual-c++

5
推荐指数
1
解决办法
178
查看次数

标签 统计

c++ ×2

visual-c++ ×2

gcc ×1

multiple-inheritance ×1