c++多重继承(C++多重继承引起的二义性问题)
本篇文章给大家谈谈c++多重继承,以及C++多重继承引起的二义性问题对应的知识点,希望对各位有所帮助,不要忘了收藏本站喔。
本文目录一览:
在C++中,什么是单继承?什么是多重继承?
从一个基类派生的继承称为单继承,单继承只继承一个类。
一个派生类指定多个基类,这样的继承结构被称做多重继承。
单一继承的一般形式为:
class派生类名:访问控制基类名
{
private:
成员说明列表
public:
成员说明列表
}
当在派生类定义中的访樱誉问控制(权限)设为public(公有)时,这个类的派生就称为“公有派生”,它有如下特点:
·基类的公有成员在脊隐段派生类中仍然是公有的。
·基类的保护成员在派生类中仍然是保护的。
·基类的不可访问和私有成员在派生类中仍然是不可访问的。
因为派生是没有限制的,即派生类也可作为基类派生新的类,所以在派生类中有一种“不可访问成员”级别存在,它要么是基类的不可访问成员,要么是基类的私有成员。
赋值兼容原则,就是在公有派生的情况下,一个派生类的对象可以作为基类的对象来使用(在公有派生的情况下,每一个派携搜生类的对象都是基类的一个对象一它继承了基类的所有成员,并且没有改变其访问权限)。
多重继承的一般形式为:
class类名l:访问控制类名2,访问控制类名3,…访问控制类名n
(
…//定义派生类自己的成员
};
从中可以看出,每个基类有一个访问控制来限制其中成员在派生类中的访问权限,其规则和单一继承是一样的。
[img]多继承 与 多重继承
多继承是指 一个子类继承多个父类 。多继承对父类的个数没有限制,继承方式可以是公共继承、保护继承和私有继承。不写继承方式, 默认是私有继承 。
多继承下派生类的定义格式如下:
按照继承的规定,派生类 C 的成员 包含了基类 A、B 中成员以及该类本身的成员 。
派生类构造函数执行顺序是先执行所属基类的构造函数,再执行派生类本身构造函数,处咐埋逗于同一层次的各基类构造函数的执行顺序取决于定义派生类时所指定的各基类顺序,与派生类构造函数中所定义的成员初始化列表的各项顺序无关。
下面通过一个例子来说明派生类构造函数的构成及其执行顺序:
该程序的输出结果为:
在该程序中,作用域运算符 :: 用于解决作用域冲突的问题。在派生类 A 中的 print() 函数的定义中,使用了 B1::print; 和 B2::print(); 语句分别指明调用哪一个类中的 print() 函数,否则会出现 二义性问题 。
如果是基类和派生类中出现同名函数,不存在二义性问题,规定派生类的成员将支配基类中的同名成员,即派生类的对象只会使用派生类的该函数。
当一个派生类 C 从多个基类派生(B1、B2...),而这些基类又有一个共同的基类 A,则对该 A 类中声明的成员进行访问时,也可能会出现二义性。应以作用域 B1:: 或 B2:: 等来限定。
由于二义性的原因,一个类不可以从同一个类中直接继承一次以上,例如:
当 B 类从 A 类派生,C 类从 B 类派生衡卖,此时称为多重继承。
当实例化子类时,会首先依次调用所有基类的构造函数,最后调用该子类的构造函数;销毁该子类时则相反,先调用该子类的析构函数,再依次调用所有基类的析构函数。
无论继承的层级有多少层,子类都可以与其直接父类或间接父类构成 “is a” 的关系,并且能够通过父类的指针对直接子类或间接子类进行相应的操作,子类对象可以给直接父类或间接父类的对象或引液消用赋值或初始化。
C++中多重继承与多层继承的区别是什么
多重继承是指一个类有多个超类,多层继承是(指裤隐子类继承的超类)继承自其它超类。
一、多重继承的举例
class A {
}
class B {
}
// 多重继承,类C同时返悉是类A和类B的漏纯乎子类
class C : public A, public B {
}
二、多层继承的例子
class A {
}
class B : public A {
}
// 多层继承,类A同时是类B和类C的超类
class C : public B {
}
关于c++多重继承和C++多重继承引起的二义性问题的介绍到此就结束了,不知道你从中找到你需要的信息了吗 ?如果你还想了解更多这方面的信息,记得收藏关注本站。