C++多重继承
假设两个抽象类(当接口用)classIA{virtualintfuncA()=0;};classIB{virtualintfuncB()=0;};然后一个类C1publi...
假设 两个抽象类(当接口用)class IA{
virtual int funcA() = 0;};
class IB{
virtual int funcB() = 0;};
然后一个类 C1 public IA, public IB{
XXX};
现在 有一个工厂类F {
IB* createB(){
return new C1;
}
};
这样 客户代码IB *P = F.createB();可以调用他们关心的IB接口里面的方法 然后 另一个模块 需要传入一个值 TEST1(IA *a){
a->funcA();
} 调用A中的方法
现在的情况是 如果我用工厂创建了IB类型的指针 怎么往TEST1里面传值呢?别告诉我先强转成子类类型,这样就失去意义了。用工厂类的意思就是不想让调用者知道B里面定义之外的方法。 展开
virtual int funcA() = 0;};
class IB{
virtual int funcB() = 0;};
然后一个类 C1 public IA, public IB{
XXX};
现在 有一个工厂类F {
IB* createB(){
return new C1;
}
};
这样 客户代码IB *P = F.createB();可以调用他们关心的IB接口里面的方法 然后 另一个模块 需要传入一个值 TEST1(IA *a){
a->funcA();
} 调用A中的方法
现在的情况是 如果我用工厂创建了IB类型的指针 怎么往TEST1里面传值呢?别告诉我先强转成子类类型,这样就失去意义了。用工厂类的意思就是不想让调用者知道B里面定义之外的方法。 展开
1个回答
展开全部
你设计工厂类是为了隐藏具体IB实现。那么你再使用TEST1就破坏了你的实现(因为你知道送给TEST1的参数一定是IA的继承类,违背了IB工厂类的设计原则)。
如果TEST1适合用于任意IB,那么你的TEST1和createB工厂类配套。否则,TEST1和createB不配套,需要转换(或者把IA整合进IB中,这样改动比较大)
如果TEST1适合用于任意IB,那么你的TEST1和createB工厂类配套。否则,TEST1和createB不配套,需要转换(或者把IA整合进IB中,这样改动比较大)
追问
谢谢 我也觉得这样写有问题了 不如写成IA{
IB * m_ib;} 放弃继承类 在构造函数或者set方法放一个IB的对象,然后需要的时候调用IB的方法
一时糊涂了 老是在想JAVA或者C++里面的多重继承或者多接口有什么用 网上一堆名词解释 真正用于代码设计的例子不多啊 感觉还没遇到过合适的例子呢
追答
对,当你感觉采用继承方式出现困难的时候,可以考虑组合方式。
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询