加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

C++语法小记---多重继承

发布时间:2020-12-16 10:46:57 所属栏目:百科 来源:网络整理
导读:多重继承 工程中不建议使用多继承,因为多继承带来的问题比带来的便利多,已被放弃 问题一:多重继承的对象,向上获取指针时,有不同的地址 ----无法解决 问题二:菱形继承问题,导致成员冗余 ----虚继承(各种编译器的实现方式不一致,不具备抑制性) 多重继
多重继承
  • 工程中不建议使用多继承,因为多继承带来的问题比带来的便利多,已被放弃

  • 问题一:多重继承的对象,向上获取指针时,有不同的地址 ----无法解决

  • 问题二:菱形继承问题,导致成员冗余 ----虚继承(各种编译器的实现方式不一致,不具备抑制性)

  • 多重继承产生多个虚函数表,建议使用dynmaic_cast进行类型转换

  • 工程中的用法:单继承 + 多接口

 1 #include <iostream>
 2 #include <string>
 3 
 4 using namespace std;
 5 
 6 class Base
 7 {
 8     int mi;
 9 public:
10     Base(int i) : mi(i)
11     {
12     }
13     
14     int getI()
15     {
16         return mi;
17     }
18     
19     bool Equal(Base *p)
20     {
21         return (p == this);
22     }
23 };
24 
25 class Interface1
26 {
27 public:
28     virtual void show1() = 0;
29 };
30 
31 class Interface2
32 {
33 public:
34     virtual void show2() = 0;
35 };
36 
37 class Derived : public Base,public Interface1,public Interface2
38 {
39     int mj;
40 public:
41     Derived(int i,int j) : Base(i),mj(j)
42     {
43     }
44     
45     int getJ()
46     {
47         return mj;
48     }
49     
50     void show1()
51     {
52         cout<<"show1()"<<endl;
53     }
54     
55     void show2()
56     {
57         cout<<"show2()"<<endl;
58     }
59     
60 };
61 
62 int main()
63 {   
64     Derived d(1,2);
65     cout<<"d.getI() = "<< d.getI() <<endl;
66     cout<<"d.getJ() = "<< d.getJ() <<endl;
67 
68     Interface1 *p1 = &d;
69     Interface2 *p2 = &d;
70     cout<<"p1 = "<<p1<<endl; 
71     cout<<"p2 = "<<p2<<endl;  //同一个对象获得不同地址
72     
73     //基类中定义equal函数,利用dynamic_cast转型,判断是否是同一个对象
74     if( d.Equal(dynamic_cast<Base*>(p1)) ) 
75     {
76         cout<<"p1 == &d"<<endl;  //输出p1 == &d
77     }
78     
79     if( d.Equal(dynamic_cast<Base*>(p2)) )
80     {
81         cout<<"p2 == &d"<<endl; //输出p2 == &d
82     }
83     
84     return 0;
85 }

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读