重载继承多态知识点总结

STL
STL容器的操作:
size() -返回当前容器的元素数量
empty()-判断容器是否为空
make_size() -返回容器能容纳的最大元素数量
begin()返回一个迭代器,指向第一个元素
end() 返回一个迭代器,指向最后一个元素之后
rbegin() 返回一个逆向迭代器,指向逆向遍历的第一个元素
rend() 返回一个逆向迭代器,指向逆向迭代器的最后一个元素
insert(pos,e) 将元素e的拷贝安插与迭代器pos所指的位置
erase(beg,end) 移除beg到end区间内的所有元素
clear() 移除所有元素
map/multimap
count(key) 返回键值等于key的元素个数
find(key) 返回键值等于key的第一个元素,找不到返回end
lower_bound(key) 返回键值大于等于key的第一个元素
upper_bound(key) 返回键值大于key的第一个元素
erase(val) 移除所有等于val的元素,返回移除元素个数
erase(pos) 删除迭代器pos所指位置的元素,无返回值

运算符重载
将运算符看作特殊的函数
定义重载运算符和定义普通的运算符一样,函数名由关键字operator和其后要定义的运算符组成,返回类型:运算结果的类型,参数表:提供参与运算的操作数。
类的成员运算符函数:
this指向的对象被作为运算符的第一个操作数。
一元运算数函数不需要提供参数,二元运算符提供一个参数作为右操作数。
非成员运算数函数:
一元运算符要提供一个类类型地参数,二元运算符需要提供两个参数分别作为左和右操作数,其中至少一个参数必须是类类型的
通常声明为友元,以便访问私有数据成员
运算符函数只有在类类型的对象参与运算时才起作用,当运算符作用于内置类型的运算对象时,不会改变该运算符原来的含义
也可以像普通函数一样直接调用运算符函数。
只有至少一个操作数是用户自定义类型时,才可以调用重载的运算符
只有在能使类的代码更易读,使类的对象的操作方式更符合一般习惯时,才重载运算符。
不能滥用运算符的重载
运算符重载不会改变内置类型的表达式中运算符的含义。
不能重载的运算符:||(逻辑或) &&(逻辑与) ,(逗号运算符)
要慎用运算符重载
设计类时,只有操作数是类需要的,且在逻辑上与运算符相关,才适合定义成重载的运算符。
常用运算符:
一元运算符:
自增自减运算符,
前缀和后缀形式都会改变对象,不能对常量对象操作,前缀形式返回改变后的对象,后缀形式返回改变之前的值。
后缀形式的自增自减比前缀形式多了一个int参数,这个参数在函数中并不使用,只是作为重载运算函数的标记来区分前缀和后缀运算。
重载自增和自减运算数时应同时定义前缀和后缀。
二元运算符:
赋值运算符:赋值运算符只能用成员函数重载,
复合赋值运算符可以用成员或非成员重载。
对于类类型的参数,如果仅仅只是读参数的值,而不改变参数,应该用const引用来传递。
普通算术运算符,关系运算符,逻辑运算符都不会改变参数,所以以const引用作为参数传递方式。
当运算符函数是类的成员函数时,就将其定义为const成员函数。
成员运算符左操作数必须是当前类的对象,左操作数不能进行自动类型转换。
非成员函数运算符为两个操作数都提供了转换的可能性,使用成员函数运算符这样可以加强运算符和类的密切关系。
如果左操作数是其他类的对象,或希望运算符的两个操作数都能进行类型转换,则使用非成员函数重载运算符。
重载输入>>输出<<运算符
用非成员函数重载这两个运算符。
输入输出运算符函数:
istream&operator >>(istream&,type&)
ostream&operator<<(ostream&,type&)
重载赋值运算符
把类的一个对象赋值给该类的另一个一个对象
重载的赋值运算符必须要定义为成员函数。
返回左操作数的引用,与内置类型的赋值运算符一致,复合赋值运算符不是必须用成员函数定义,但一般倾向于定义为成员函数,也返回左操作数的引用。

组合与继承
将一个类的对象作为另一个对象的成员,叫做组合。
继承
在已有类的基础上继承得到新类型,这个新类型自动拥有已有类的特性,并可以修改继承到的特性或者曾加自己的新特性。
继承:在已有类的基础上创建新类的过程,
被继承的已有类称为基类
继承得到的新类称为派生类
派生类可以在被继承,这样构成的层次结构称为继承层次
结构:
class 派生类名:基类名称
{数据成员与成员函数声明};
public 公有继承
private 私有继承
protected 保护继承
不论哪种方式继承,派生类都不能直接使用基类的私有成员,
在公有派生类中,基类的public成员和protected成员被继承,分别作为派生类的public成员和protected成员。基类的private成员虽然也被继承了,但在派生类中是不可见的。
在私有派生类中,基类的punlic成员和protected成员被派生类作为自己的private成员继承下来。基类的private成员也被继承下来,但是在派生类中是不可见的。
在C++的继承机制中,派生类吸收基类中除构造函数与析构函数以外的全部成员。
可以通过派生类中定义同名成员(包括成员函数与数据成员)来屏蔽在派生类中不起作用的部分基类成员。
基类的初始化
在创建派生类对象时用指定参数调用基类的构造函数来初始化派生类继承基类的数据
派生类构造函数声明
派生类构造函数(变元表):基类(变元表),对象成员1(变元表)…
构造函数执行的顺序:基类,对象成员,派生类
派生类构造函数与析构函数使用要注意:
基类的构造函数和析构函数不能被继承,
如果基类没有定义构造函数或有无参的构造函数,派生类也可以不用定义构造函数,
如果基类无无参的构造函数,派生类必须定义构造函数,
如果派生类的基类也是派生类,则每个派生类只负责基类的构造
派生类是否定义析构函数与所属的基类无关。
派生类构造函数的一般形式:
派生类::派生类名(参数总表):基类名(参数表){派生成员新增成员初始化语句}
赋值兼容原则:
派生类的对象可以赋给基类对象,
派生类对象可以初始化基类的引用,
派生类对象的地址可以赋给基类类型的指针

虚函数与多态
重载函数是多态性的一种简单形式,
虚函数允许函数调用与函数体的联系在运行时才进行,称为动态联编。
冠以关键字virtual的成员函数称为虚函数。
一个虚函数,在派生类界面相同的重载函数都保持虚特性,虚函数必须是基类的成员函数,虚函数可以是另一个类的友元,析构函数可以是虚函数,但构造函数不能是虚函数。
在派生类中重载函数的虚函数要求函数名,返回类型,参数个数,参数类型和顺序完全相同
派生类应该从它的基类公有派生,必须首先在基类中定义虚函数派生类对基类中声明虚函数重新定义时,关键字virtual可以不写,
**一般可以通过基类指针访问虚函数时才能体现多态性,**一个虚函数无论被继承多少次,保持其虚特性。析构函数,内联成员函数,静态成员函数不能是虚函数析构函数可以是虚函数,通常声明为虚函数。
纯虚函数是一种特殊的虚函数在许多情况下,在基类中不能对虚函数给出有意义的实现,而是把它声明为纯虚函数,它的实现留给基类的派生类去做。

纯虚函数是一个在基类中说明的虚函数,在基类中没有定义,要求派生类都定义自己的版本,
纯虚函数为各自的派生类提供一个公公界面,
纯虚函数说明形式:
virtual 类型 函数名(参数表)=0

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值