我怎样才能让一个类实现一个接口...(C ++)

maximum_prime_is_463035818

...当该类确实为所有抽象方法提供实现,但是不是“正式”实现该接口时吗?

可以说我有以下几点:

class AInterface {
    public:
        virtual void mem_func()=0;
        virtual ~AInterface(){}
};

void AFunction(AInterface* i){};

class BClass {
    public:
        void mem_func(){}
        virtual ~BClass(){}
};

并且我无法更改其中任何一个,但是我想使用BClass类的对象来调用AFunction。

其实我想写些类似的东西

class MyABClass : public BClass,public AInterface {};

但这无济于事(该类仅继承了这两种方法并且是抽象的)。我想做到这一点的一种方法是写类似

class MyABClass : public AInterface {
    public:
        void mem_func(){a.mem_func();}
    private:
        BClass a;
}

这可以正常工作,但是我想知道是否可以节省一些文字,或者是否有更好的方法来处理这种情况。

托比·麦克纳莫比

我会使用与您上一个代码段非常相似的方法

class MyABClass : public AInterface {
    public:
        void MyABClass(BClass &_a)
            : a(_a)
        {}
        void mem_func(){a.mem_func();}
    private:
        BClass &a;
}

这是一种设计模式,称为适配器(带委托)。也许您还想阅读有关代理模式的信息。

更新(考虑肯尼的评论):是否BClass作为参考或副本通过尚有待商bat。这取决于您想要什么。如果您希望使用包装器方便地更改原始BClass实例,则可以将其BClass &用作构造函数参数。另一方面,如果副本足够,则可以BClass使用&符使用&好吧,如果有副本构造函数可用。最后,在使用可能会产生副作用的参考文献时,您必须要注意(可能还是不希望出现的副作用)。

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

我怎样才能在另一个宏中使用一个宏来将宏的定义连接到某个东西?C/C++

C++:在一个类中实现一个接口或一个可选接口的多个实例

我怎样才能使23个十进制整数,然后将其包装在NSNumber中,然后在Objective-C中包装一个NSString

我怎样才能让jQuery用fadeToggle切换一个类?

我怎样才能让一个 for 语句有一个 else

我怎样才能让一个用户表单完成另一个?

我怎样才能让一个函数等到代码前一行完成

我怎样才能让Selenium使用我的firefox(而不是创建一个新的)

我怎样才能让我的Ubuntu从给定的源中寻找一个库

我怎样才能让我的 CNN 输出一个特征向量

C#中的一个接口和两个实现类(代理)

我怎样才能让一个for循环,将显示在JavaFX 8周的TextField

我怎样才能让一个for循环与双打的阵列?

iText的7:我怎样才能让溢出一个div?

我怎样才能让一个元素失去它的盒子模型?

从数组中删除一个值。我怎样才能让它工作

我怎样才能让“图像”键成为第一个?

我怎样才能让它移动到一个新目录?

我怎样才能让 clojure 写一个对套接字的响应?

我怎样才能让你每次回答一个问题时不断重复?

我怎样才能让 Neovim 的“e”地图增加一个位置?

我怎样才能让一个有界类型参数的方法排除一个子类?

我怎样才能让一个块跟随 pygame 中的另一个块

如何保证一个类在C#中实现特定的接口

使用扫描仪,我怎样才能得到一个单元格名称包含数字和垃圾,如“A3、B2、C1”

我可以定义一个 IDictionary 在 C# 中实现的接口吗?

从接口I创建一个C类的ArrayList

我怎样才能让我的动画在另一个方向上工作?

我怎样才能让我的Node.js的MySQL连接为一个承诺的工作?