一,继承基本概念
面向对象的四大基本特征:抽象,封装,继承,多态。
继承在c++中的理解:从既有类产生新类的过程。
既有类:动物类。父类,基类。
新类:鸟类。子类,派生类。
派生类生成的步骤
1.吸收基类的成员
2.改造基类的成员
3.新增自己的成员
总结:吸收,改造,新增。
继承的局限
所有的数据成员是可以被派生类吸收,改造的,但是部分成员函数不行
1.构造函数和析构函数不能被继承。
2.用户重载的operator new/delete/=
3.友元关系不能被继承
总结:无论为何种类型方式继承,派生类除了基类的私有成员不能被访问外i,其它类型成员均能被访问。
protected继承和private继承的区别
protected继承可以无限的继承下去,但是private继承一次就终止。
注意:如果不写继承方式,那么默认的继承方式都是私有的。
二,派生类对象的构造与销毁
重要:为了完成从基类吸收过来的数据成员的初始化,需要存在派生类的构造函数的初始化列表中,借助基类的构造函数完成吸收过来的数据成员的初始化。
派生类的构造函数名(参数列表)
:基类的构造函数(基类构造函数的参数列表)
{
//派生类的构造函数的函数体
}
2.如果派生类没有显式定义构造函数而基类有显示定义构造函数,则基类必须拥有默认构造函数,因为派生类的构造函数会默认调用基类的默认(无参)构造函数。目的:就是为了完成吸收的数据成员的初始化
总结:在创建派生类对象的时候,为了完成从基类吸收过来的数据成员的初始化,需要使用基类的构造函数,那么最好可以手动在派生类的初始化列表中将基类的构造函数显示的调用出来,这样可以保证代码不出错。
对于多继承而言,每个基类的前面都要写继承方式,否则就按照默认的私有进行继承
1.多基继承(多基派生)成员函数访问冲突
解决方案:使用类名+作用域限定符
set容器:
set的特征:
1.set中存放的元素是唯一的,不能重复。
2.默认情况下,会按照元素进行升序排序(从小到大)
3.set的count和find的作用,count是查找的元素在容器中 的个数,find是查找元素是否存在,(**注意:显示的是查找的值而不是位置**)
map容器:
map的特征:
1.存放的是key->value类型,也就是pair类型,key值是唯一的,不嫩重复,但是value值是可以重复的
2.默认情况下,会按照key值进行升序排序(从小到大)初始化