c++ - 组合接口(interface)类

标签 c++ inheritance architecture interface

是否有任何正确的方法来声明一个类(接口(interface))Limit,它可以用作接口(interface) ParamLim 的“组合” >?

基接口(interface)类 ParamLim:

class Param {
public:
    virtual char *toStr(void) = 0;
};

class Lim {
public:
    virtual char *toStrL(void) = 0;
};

ParamAParamB 实现接口(interface)Param:

class ParamA : public Param {
public:
    virtual char *toStr(void){ return "A";};    
};

class ParamB : public Param {
public:
    virtual char *toStr(void){ return "B";} 
};

LimitALimitB 还实现了 Lim:

class LimitA : public ParamA, public Lim {
public:
    virtual char *toStrL(void){ return "LA";}
};

class LimitB : public ParamB, public Lim {
public:
    virtual char *toStrL(void){ return "LB";}
};

使用 Limit 我想访问方法 toStr()toStrL()

class Limit : public Param, public Lim {
};

void example(void){
    LimitA limitA;
    LimitB limitB;
    Limit *limit = polymorphic_downcast<Limit *>(&limitB);  // unable to type cast correctly
    char *str1 = limit->toStr();
    char *str2 = limit->toStrL();
}

最佳答案

不,那是不可能的。运行时只能知道您在类声明中显式继承的派生类。您以后不能插入额外的类。

关于c++ - 组合接口(interface)类,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23131491/

相关文章:

java - 继承java "cannot find symbol"

performance - fseek()如何在文件系统中实现?

iPhone架构

architecture - CQRS:查询和业务规则

c++ - OpenGL - 深度缓冲区在渲染半透明立方体时切出不应该的面

c++将大文本文件读取为字符串(大于string::max_size)

c++ - 修改 std::vector 的底层数据结构不会改变它的大小

c++ - operator const char* 以奇怪的方式覆盖(?)我的另一个变量

java - 将子类型集合分配给父类型

c# - 实现接口(interface)