我可以: 邀请好友来看>>
ZOL星空(中国) > 技术星空(中国) > 知识点:C++中的派生类的一些注意事项总结
帖子很冷清,卤煮很失落!求安慰
返回列表
签到
手机签到经验翻倍!
快来扫一扫!

知识点:C++中的派生类的一些注意事项总结

65浏览 / 1回复

sunplusedu20...

sunplusedu2012a

0
精华
2
帖子

等  级:Lv.1
经  验:154
  • Z金豆: 0

    千万礼品等你来兑哦~快点击这里兑换吧~

  • 城  市:北京
  • 注  册:2012-11-26
  • 登  录:2013-04-27
发表于 2012-11-27 11:10:45
电梯直达 确定
楼主
这几天又从新看了一下派生类的,对派生类做了一下总结,愿和友友们一起分享一下,如有不正确的地方希望指证。从继承源上分有单继承和多继承:单继承大家都很熟悉了,主要谈一下多继承(一)多继承的方式:     class <派生类名> :<派生方式1> <基类1>, <派生方式2> <基类2>, ... ...    {         //派生类的内容    };
其中 派生方式1 ,派生方式2 ... ...可以是public,private,protected中的任意方式,如:    class A{  public:    int x;    void set(int a);};
  class B{  public:    int x;    void set(int a);
  };
  class C :public A, public B{   public:     int y;     int get()     {         return x*y;      }  };
其中派生类C公有继承基类A和B,所以对于单个的C和A、C和B之间的关系和单继承一样
(二)二义性
   (1)在多继承的派生方式时,又是会产生二义性的问题,如上面的例子,派生类C分别公有继承基类A和B,所以C可以使用基类A和B的公有数据和公有函数,像派生类C中的get函数在调用x时,编译器并不知道是在调用基类A中的公有数据x,还是调用基类B中的公有数据x,这样就会产生二义性。
  同时,在基类A中和基类B中如果有相同的公有函数,而在派生类中并没有重新定义该函数时,如:     C c1;    c1.set(2);       //error   编译器并不知道是在调用哪个基类中的set函数,如下调用是正确的  c1.A::set(2);     //ok  c1.B::set(2);     //ok  (2)另外还有一种可能会产生二义性问题,当派生类继承的多个基类中有一些基类又是同一基类的派生类时,也会产生二义性问题,如:
    class A{  public:    int x;   };
  class B1:public A{   ... ...};
  class B2: public A{   ... ...};
  class C :public B1, public B2{   public:    void set(int a)    {       x = a;          //error      A::x = a;      //error    }};
这样在派生类中想用x时,这样两种方式是错误的,因为基类B1和B2都继承于类A,他们中都用x使得编译器并不知道是调用的是哪个基类的,应该为一下两种方式:  B1::x = a;  B2::x = a;以上是自己对多继承的一些理解,或许有些不准确的地方,希望大家多多指教,并且不断追加其内容。(看完后不要忘了顶呀,谢谢)

qing00302

qing00302


精华

帖子

等  级:Lv.2
经  验:373
发表于 2012-12-03 11:03:12 1楼

知识点:C++中的派生类的一些注意事项总结回复图片0
高级模式
星空(中国)精选大家都在看24小时热帖7天热帖大家都在问最新回答

针对ZOL星空(中国)您有任何使用问题和建议 您可以 联系星空(中国)管理员查看帮助  或  给我提意见

快捷回复 APP下载 返回列表