设为首页 加入收藏

TOP

C++中的多重继承(一)(一)
2019-05-24 12:07:53 】 浏览:121
Tags:多重 继承

1,C++ 中是否允许一个类继承自多个父类?

    1,可以;

    2,这种情况就是多重继承;

    3,多重继承的表象就是一个类有多个父类;

    4,这是 C++ 非常特别的一个特性,在其他的程序设计语言中比如 C#、Java、Object Pascal 中都只支持单重继承;

   

2,C++ 支持编写多重继承的代码:

    1,一个子类可以拥有多个父类;

    2,子类拥有所有父类的成员变量;

    3,子类继承所有父类的成员函数;

    4,子类对象可以当作任意父类对象使用;

   

3,多重继承的语法规则:

    1,代码示例:

1 class Derived : public BaseA, public BaseB, public BaseC
2 {
3     // ...
4 };

    2,多重继承的本质与单继承相同;

   

4,多重继承问题一编程实验:

  1 #include <iostream>
  2 #include <string>
  3 
  4 using namespace std;
  5 
  6 class BaseA
  7 {
  8     int ma;
  9     
 10 public:
 11     BaseA(int a)
 12     {
 13         ma = a;
 14     }
 15     
 16     int getA()
 17     {
 18         return ma;
 19     }
 20 };
 21 
 22 class BaseB
 23 {
 24     int mb;
 25     
 26 public:
 27     BaseB(int b)
 28     {
 29         mb = b;
 30     }
 31     
 32     int getB()
 33     {
 34         return mb;
 35     }
 36 };
 37 
 38 class Derived : public BaseA, public BaseB
 39 {
 40     int mc;
 41     
 42 public:
 43     Derived(int a, int b, int c) : BaseA(a), BaseB(b)  // 初始化列表中同时调用父类的构造函数;
 44     {
 45         mc = c;
 46     }
 47     
 48     int getC()
 49     {
 50         return mc;
 51     }
 52     
 53     void print()
 54     {
 55         cout << "ma = " << getA() << ", "
 56              << "mb = " << getB() << ", "
 57              << "mc = " << mc << endl;
 58     }
 59 };
 60 
 61 int main()
 62 {
 63     cout << "sizeof(Derived) = " << sizeof(Derived) << endl;    // 12
 64     
 65     Derived d(1, 2, 3);
 66     
 67     d.print();
 68     
 69     cout << "d.getA() = " << d.getA() << endl;  // 1
 70     cout << "d.getB() = " << d.getB() << endl;  // 2
 71     cout << "d.getC() = " << d.getC() << endl;  // 3
 72     
 73     cout << endl;
 74     
 75     BaseA* pa = &d;
 76     BaseB* pb = &d;
 77     
 78     cout << "pa->getA() = " << pa->getA() << endl;  // 1
 79     cout << "pb->getB() = " << pb->getB() << endl;  // 2
 80     
 81     cout << endl;
 82     
 83     void* paa = pa;
 84     void* pbb = pb;
 85     
 86     
 87     if( paa == pbb )
 88     {
 89         cout << "Pointer to the same object!" << endl; 
 90     }
 91     else
 92     {
 93         cout << "Error" << endl;  // 打印 Error;
 94     }
 95     
 96     cout << "pa = " << pa << endl;  // 0xbfe7e304
 97     cout << "pb = " << pb << endl;  // 0xbfe7e308
 98     cout << "paa = " << paa << endl;  // 0xbfe7e304
 99     cout << "pbb = " << pbb << endl;   // 0xbf7e308
100     
101     return 0;
102 }

   

5,通过多重继承得到的对象可能拥有“不同地址”:

    1,解决方案:无;

    2,多重继承成员变量排布:

 

       1,指向同一个对象的不同位置;

       2,不方便开发了,因为我们一般比较这两个指针是否相同来判断是否指向同一个对象;

       3,这里两个地址值不同依然可能指向同一个对象,情况变得非常复杂;

   

6,多重继承可能产生冗余的成员:

 

    1,Doctor 这个类有两个 m_name,两个 m_age;

   

7,多重继承问题二编程实验:

    1,描述 本文6 中类图:

 1 #include <iostream>
 2 #include <string>
 3 
 4 using namespace std;
 5 
 6 class People
 7 {
 8     string m_n
首页 上一页 1 2 下一页 尾页 1/2/2
】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
上一篇C++中的new/delete、构造/析构函.. 下一篇C++对象在继承情况下的内存布局

最新文章

热门文章

Hot 文章

Python

C 语言

C++基础

大数据基础

linux编程基础

C/C++面试题目