sunnycase吧 关注:16贴子:918
  • 13回复贴,共1

还是继承的问题……

只看楼主收藏回复

外部公开:
class a
{
// 一些接口
……
}
class b : public a
{
// 一些接口
……
}
内部:
class _a : public a
{
// 实现一些接口
……
}
现在,class _b的继承关系怎么搞?


1楼2011-05-22 11:15回复
    class a;
    class b:public virtual a
    class _a:public virtual a
    class _b:public b,public _a


    IP属地:北京来自掌上百度2楼2011-05-22 18:13
    回复
      能解释下那个编译器警告以及不能强制类型转换的原因么?


      来自掌上百度3楼2011-05-22 22:28
      回复
        不用虚继承会造成基类成员二义性
        虚继承需要编译器将基类折叠 这是个间接引用 所以不能强制转换 要用dynamic_cast


        IP属地:北京来自掌上百度4楼2011-05-22 22:40
        回复
          回复4楼:
          那个警告似乎是在虚继承以后跳出来的
          不用虚继承无法编译(不能实例化抽象类,why?)
          还有,那种转换是将基类转换为子类?
          和先转换为指针有区别么?


          来自掌上百度5楼2011-05-23 11:54
          回复
            回复5楼:
            更安全 转换不能会抛出异常
            不过明知可以转换的话 除了影响效率没别的什么


            IP属地:北京来自掌上百度6楼2011-05-23 12:42
            回复
              回复6楼:
              为什么转换还会影响效率?


              来自掌上百度7楼2011-05-23 13:38
              回复
                回复7楼:
                要通过type_info对比


                IP属地:北京来自掌上百度8楼2011-05-23 17:53
                回复
                  是C风格的转换还是C++标准的转换方式会影响效率?
                  还是都影响效率?


                  9楼2011-05-23 22:24
                  回复
                    回复9楼:
                    dynamic_cast会


                    IP属地:北京来自掌上百度10楼2011-05-23 23:19
                    回复
                      难道c形式的强制类型转换不会耗费效率?
                      另外。。比如我函数给外部一个ICamera,那我函数内部new CCamera(实现),我要这样返回?return (ICamera)CCamera?
                      (不过VS似乎报错)


                      来自掌上百度11楼2011-05-24 07:50
                      回复
                        回复11楼:
                        return dynamic_cast<ICamera*>(new CCamera);
                        对于虚继承子类转换为基类只能dynamic_cast不能用c风格的
                        也就是说除了dynamic_cast 其他cast都可以用c风格的替代


                        IP属地:北京来自掌上百度12楼2011-05-24 12:36
                        回复
                          回复12楼:
                          但是用g++编译了个简单的代码,测试没有任何问题啊。。
                          直接 return (ICamera*)CCamera
                          在主程序中没一点问题
                          不会只是vs的特征吧


                          来自掌上百度13楼2011-05-24 13:27
                          回复
                            回复13楼:
                            不知


                            IP属地:北京来自掌上百度14楼2011-05-24 17:52
                            回复