首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >C++接口交换

C++接口交换
EN

Stack Overflow用户
提问于 2013-02-19 13:54:37
回答 1查看 123关注 0票数 1

我试图通过创建只具有纯虚方法的类来使用类似C++ java/C#的接口,如下所示:(这只是一个示例)

代码语言:javascript
复制
class IMyInterface
{
public:
    virtual int someFunc() = 0;
    virtual ~IMyInterface() {}
};

一切都很好,直到我不得不实现一个在IMyInterface数组中交换两个元素的方法,因为在C++中不允许实例化一个接口,因为编译器会抱怨temp没有实现someFunc()

代码语言:javascript
复制
void Exchange(IMyInterface* array, int i, int j)
{
    IMyInterface temp = array[i]; // not allowed
    array[i] = array[j];
    array[j] = temp;
}

所以我不得不改变接口类的定义,去掉纯虚函数,并提供一个方法的“默认”实现,如下所示:

代码语言:javascript
复制
class IMyInterface
{
public:
    virtual int someFunc()
    {
        return 0;
    }
    virtual ~IMyInterface() {}
};

问题是IMyInterface不再是一个接口了,它不会强制从它继承的任何类来实现someFunc()

不管怎样,围绕这件事?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2013-02-19 13:58:18

接口不是完全定义的对象,因此不能创建它们的实例。它们的大小和结构未定义,因此显然不能在值上下文中创建或使用它们。然而,您可以创建指向接口的指针(快乐的家伙?)因为指向对象的指针定义得非常好。示例代码可以变成:

代码语言:javascript
复制
void Exchange(IMyInterface** array, int i, int j)
{
    IMyInterface* temp = array[i]; // allowed :)
    array[i] = array[j];
    array[j] = temp;
}
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/14950784

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档