多种继承的实现问题

七擒关羽 2013-09-28 02:33:43

clas A{
public:
virtual void fun(){
printf("A\n");
}

virtual void fun2(){
}
};

class B{
public:
irtual void fun()=0;
};

class C : public A,public B{
public:
virtual void fun2(){
printf("C"\n);
}
//如果我没有在C中实现了fun,那么B中的接口用A的实现代替吗?
};
...全文
175 13 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
13 条回复
切换为时间正序
请发表友善的回复…
发表回复
七擒关羽 2013-09-29
  • 打赏
  • 举报
回复

//算了,结贴吧,不问这种无聊的问题了,使用了老办法,重命名基类或接口类的函数。
clas A{
public:
    virtual void fun1(){
         printf("A\n");
    }
     
    virtual  void fun2(){
    }
};
 
class B{
public:
    irtual void fun()=0;
};
 
class C : public A,public B{
public:
    virtual  void fun2(){
        printf("C"\n);
    }
   
    void fun()
   {
       fun1();//重命名了A中相同函数
   }

};
baichi4141 2013-09-28
  • 打赏
  • 举报
回复
A有一个方法,名叫fun B有一个方法,名叫fun C继承了A和B,C有一个方法,名叫fun 于是编译器不懂了,你这个C到底继承的是哪一个?是A还是B? 楼主说,你管它继承哪一个?反正名字相同就有关系 编译器说,对不起,你先设计好正确的结构,才能用同名这个代码写法告诉我,如果你自己没想明白,那我只要直接报同名错误就行了
baichi4141 2013-09-28
  • 打赏
  • 举报
回复
继承是面向对象思想的一个概念,不是文字游戏 如果你觉得两个函数名称相同就有关系,那你根本不懂继承,更不用谈什么“继承的意义”
Saleayas 2013-09-28
  • 打赏
  • 举报
回复
那就把接口移到基类。
七擒关羽 2013-09-28
  • 打赏
  • 举报
回复
出现这种问题是 我需要设计 不同的父类,但是有统一的接口,衍生出来的子类的调用可以通过接口调用,但是想避免对父类的重复实现
ztenv 版主 2013-09-28
  • 打赏
  • 举报
回复
引用 6 楼 studyCBC 的回复:
A::fun当然是一个方法,但是这种不是很好的设计,失去了继承的意义了。
出现这种应用,感觉应该是设计的问题,可以避免的。
风行踩火轮 2013-09-28
  • 打赏
  • 举报
回复
用派生类指针给基类指针赋值的方式试试
七擒关羽 2013-09-28
  • 打赏
  • 举报
回复
A::fun当然是一个方法,但是这种不是很好的设计,失去了继承的意义了。
二零一四Tenc 2013-09-28
  • 打赏
  • 举报
回复
引用 4 楼 studyCBC 的回复:
[quote=引用 3 楼 lianshaohua 的回复:] 像你这样的继承,C依然有未实现的纯虚函数(B::fun),所以C是一个抽像类
知道了,对C来说 虽然两个名字函数相同,但是实际对应得名字是不同的,变成了 Afun,Bfun,其中Bfun没有实现。 如果我实现了fun,那么是否变成对A来说是重载,对B来说是实现。 对于多种继承中,出现父类函数相同,但又想调用已实现的父类函数,如何处理?[/quote] 用::试试
七擒关羽 2013-09-28
  • 打赏
  • 举报
回复
引用 3 楼 lianshaohua 的回复:
像你这样的继承,C依然有未实现的纯虚函数(B::fun),所以C是一个抽像类
知道了,对C来说 虽然两个名字函数相同,但是实际对应得名字是不同的,变成了 Afun,Bfun,其中Bfun没有实现。 如果我实现了fun,那么是否变成对A来说是重载,对B来说是实现。 对于多种继承中,出现父类函数相同,但又想调用已实现的父类函数,如何处理?
ztenv 版主 2013-09-28
  • 打赏
  • 举报
回复
像你这样的继承,C依然有未实现的纯虚函数(B::fun),所以C是一个抽像类
ztenv 版主 2013-09-28
  • 打赏
  • 举报
回复
引用 楼主 studyCBC 的回复:

clas A{
public:
    virtual void fun(){
         printf("A\n");
    }
    
    virtual  void fun2(){
    }
};

class B{
public:
    irtual void fun()=0;
};

class C : public A,public B{
public:
    virtual  void fun2(){
        printf("C"\n);
    }
//如果我没有在C中实现了fun,那么B中的接口用A的实现代替吗?
};
不能的,A、B是平级关系
max_min_ 2013-09-28
  • 打赏
  • 举报
回复
A,B两个类没有关系的吧! 只是c 继承了 A和B而已, A,B是并行的!

65,186

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

试试用AI创作助手写篇文章吧