刚刚学习过c++的继承方面的知识,现在和大家分享下学习心得。继承可以实现代码的复用,并且允许程序员进行一定的扩展,大大减少了程序员的工作量。先给大家铺垫一点知识, 关于派生类的权限在继承后与基类权限的关系:
首先进程分为以下几个继承方式:
1、单继承
2、多继承
3、菱形继承
我们先谈谈一种比较简单的继承方式,单继承吧
首先我们写了一个单继承的的代码,那么它的基类和派生类是在内存空间中是怎样存储的呢?如下图所示,要注意一点,在继承的结构中,如果基类显示定义了缺省构造参数,则派生类会合成一个构造函数。还有同名隐藏问题,如果基类和派生类有重名(成员变量、函数),则在使用时优先使用派生类的成员函数和成员变量。
赋值不兼容原则:(这里只针对public继承)
1、派生类对象可以直接赋值给基类。
2、基类指针或引用可以直接指向派生类对象。
3、友元函数和operator=不允许被继承。
多继承可以看作是单继承的扩展。所谓多继承是指派生类具有多个基类,派生类与每个基类之间的关系仍可看作是一个单继承。
多继承下派生类的定义格式如下:
class <派生类名>:<继承方式1><基类名1>,<继承方式2><基类名2>,…
{
<派生类类体>
};
其中,<继承方式1>,<继承方式2>,…是三种继承方式:public、private、protected之一。例如:
class A
{
…
};
class B
{
…
};
class C : public A, public B
{
…
};
其中,派生类C具有两个基类(类A和类B),因此,类C是多继承的。按照继承的规定,派生类C的成员包含了基类A, B中成员以及该类本身的成员。
多继承的构造函数
在多继承的情况下,派生类的构造函数格式如下:
<派生类名>(<总参数表>):<基类名1>(<参数表1>),<基类名2>(<参数表2>),…
<子对象名>(<参数表n+1>),…
{
<派生类构造函数体>
}
其中,<总参数表>中各个参数包含了其后的各个分参数表。
称之。
)thEast)
。。。。。。。
钻石继承,他是单继承和多继承的结合体,同样我们也给出一个简单的菱形继承的代码。