c++多继承

来源:互联网 发布:淘宝怎么投诉卖家手机 编辑:程序博客网 时间:2024/06/06 01:50

1、  多继承

(1)概念:一个类有多个直接基类的继承关系称为多继承

 

(2)多继承声明语法

class 派生类名 : 访问控制 基类名1 ,  访问控制  基类名2 ,  … , 访问控制  基类名n

    {

        数据成员和成员函数声明

    };

  类 C 可以根据访问控制同时继承类A 和类 B 的成员,并添加自己的成员


(3)多继承的派生类的构造和访问

1)多个基类的派生类构造函数可以用初始式调用基类构造函数初始化数据成员

2)执行顺序与单继承构造函数情况类似。多个直接基类构造函数执行顺序取决于定义派生类时指定的各个继承基类的顺序。

3)一个派生类对象拥有多个直接或间接基类的成员。不同名成员访问不会出现二义性。如果不同的基类有同名成员,派生类对象访问时应该加以识别。


(4)实例代码:

#include <stdio.h>class A{public:int a;int b;testA(int a, int b){this->a = a;this->b = b;printf("A的构造函数被调用!\n");}~testA(){printf("a = %d, b = %d\n", a, b);printf("A析构函数被调用!\n");}};class B{public:int c;int d;testB(int c, int d){this->c = c;this->d = d;printf("B的构造函数被调用!\n");}~B(){printf("c = %d, d = %d\n", c, d);printf("B析构函数被调用!\n");}};class C :  public A, public B{public :int e;C(int e) : A(10, 20), B(30, 40){this->e = e;}~C(){printf("e = %d\n",e);printf("C析构函数被调用!\n");}};int main10_1(){C t1(50);return 0;}

1、  多继承的二义性

(1)      概念:一般说来,在派生类中对基类成员的访问应该是唯一的,但是,由于多继承情况下,可能造成对基类中某成员的访问出现了不唯一的情况,则称为对基类成员访问的二义性问题。

(2)      多继承二义性产生的两种情况及解决方法

      1)  派生类的多个基类中调用其同名成员时可能出现二义性

      2)  派生类有共同基类时,访问公共基类成员可能出现二义性

      3)  二义性可以用类名加与解析符可以区分并加以使用

(3)      多继承二义性的概念图


(4)      实例代码:

#include <stdio.h>class test11_1{public:int a;};class test11_2 : public test11_1{public:int b;};class test11_3 : public test11_1{public:int c;};class test11_4 : public test11_2, public test11_3{public:int d;};int main11_1(){test11_4 t1;//t1.a = 20;    //多继承的二义性,可以用类名加域解析符可以使用t1.b = 20;t1.c = 30;t1.d = 40;return 0;}

1、  虚继承

(1)      概念:C++使用虚拟继承(Virtual Inheritance),解决从不同途径继承来的同名的数据成员在内存中有不同的拷贝造成数据不一致问题,将共同基类设置为虚基类。这时从不同的路径继承过来的同名数据成员在内存中就只有一个拷贝,同一个函数名也只有一个映射。

(2)      语法:

class 派生类:virtual基类1virtual基类2...virtual基类n

{

...//派生类成员声明

};

(3)      虚继承执行顺序:

1)  首先执行虚基类的构造函数,多个虚基类的构造函数按照被继承的顺序构造

2)  执行基类的构造函数,多个基类的构造函数按照被继承的顺序构造

3)  执行成员对象的构造函数,多个成员对象的构造函数按照申明的顺序构造;

4)  执行派生类自己的构造函数;

5)  析构以与构造相反的顺序执行;

(4)      虚继承概念图:


(5)      实例代码:

#include <stdio.h>class test12_1{public:int a;};class test12_2 : virtual public test12_1   //虚继承test12_1{public:int b;};class test12_3 : virtual public test12_1  // //虚继承test12_1{public:int c;};class test12_4 : public  test12_2, public test12_3{int d;};int main(){test12_4 t1;printf("sizeof(t1) = %d\n", sizeof(t1));return 0;}



原创粉丝点击
热门问题 老师的惩罚 人脸识别 我在镇武司摸鱼那些年 重生之率土为王 我在大康的咸鱼生活 盘龙之生命进化 天生仙种 凡人之先天五行 春回大明朝 姑娘不必设防,我是瞎子 娘亲怀了我的种 民儿和娘玉米地故事 快抽出去外婆会怀孕的 民儿玉米地妈全给你 民儿和娘玉米地的小说 第章母亲播种危险期怀孕 儿子今晚后妈随便你怎么弄说说 同学说要看我骑他妈我说可以 荒村野性全文阅读目录 小成和后妈全文免费阅读文章 小诚和后妈全文免费阅读 娘亲在玉米地河边 我和娘亲玉米 娘亲给儿生个娃大结局 在玉米地插娘亲短文 在玉米地插娘亲电影 王来地里与娘激战2 在玉米地插娘亲播放 孩子别谢了我是你妈 臭小子 别急妈咪又不是不给你 粉嫩娘亲全文阅读全文 你的好粗妈v好痛 乡村孽缘上了王雪琴101一0 乡村小神医之情缠玉米地 乡村孽缘长篇小说全文免费阅读 乡村孽缘王雪琴怀孕是第几章 桃花村傻牛李大根 拨出来你爸要来 一个山村全家小说全集 乡村孽缘胡秀`小说全集 儿子小点声别让你爸听见长篇小说 胡秀英全文费阅读全文 儿子小声点别让你爸听见小说 乡村浪子的孽缘大伯母 畜牲别让你爸听见在线小说阅读 胡秀英乡全文免费阅读 婶的肥田全文免费阅读 乡村孽缘 王雪琴 熟花母芬芳泌蜜全文阅读 中文字字幕23页在线 单身娘亲有肥田