多态对象成员 [英] Polymorphic object members

查看:117
本文介绍了多态对象成员的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我有以下问题。我有一个基类和几个继承自它的类。所有这些类都共享一个非常相似的接口,很可能不需要重载大多数共享方法。

I have the following problem. I have a base class and several classes inheriting from it. All those classes are sharing a very similar interface and will most probably not be required to overload most of the shared methods.

但是,他们都使用不同的成员对象

However, all of them are using different member objects that are derived from each other and share a very similar interface too.

class BaseClass
{
    protected:
        Com* com;

    public:
        void setReady()
        {
            com->setReady();
        }
}

class DerivedClass : BaseClass
{
    protected:
        DerivedCom* com;
}

class Derived2Class : BaseClass
{
    protected:
        Derived2Com* com;
}

如何启用 DerivedClass 使用 setReady()运行其版本 com ,而不是继承自 BaseClass

How can I enable DerivedClass to have setReady() run its version of com instead of the one inherited from BaseClass?

推荐答案

使用不同的Com实现构造你的实例。 (假设DerivedCom实现Com)

Construct your instances with different implementations of Com. (Assuming DerivedCom implements Com)

class BaseClass
{
    protected:
        Com* com;

    public:
        BaseClass(Com* c = new Com) : com(c) 
        {}

        void setReady()
        {
            com->setReady();
        }
}

class DerivedClass : BaseClass
{
    public:
        DerivedClass() : BaseClass(new DerivedCom) 
        {}
}

class Derived2Class : BaseClass
{
    public:
        Derived2Class() : BaseClass(new Derived2Com) 
        {}
}

这篇关于多态对象成员的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆