- 可作为函数重载判断依据的有:参数个数、参数类型、const修饰符;
不可以作为重载判断依据的有:返回类型。 C++中可以重载的运算符:new/delete、new[]/delete[]、++等。
可以重载的运算符:、.、::、?:、sizeof、typeid、.、**、不能改变运算符的优先级。引申:重载++和–时是怎么区分前缀++和后缀++的?
例如当编译器看到++a(先自增)时,它就调用operator++(a);
但当编译器看到a++时,它就调用operator++(a,int)。即编译器通过调用不同的函数区别这两种形式。C++的多态性分为静态多态和动态多态。
静态多态性:编译期间确定具体执行哪一项操作,主要是通过函数重载和运算符重载来实现的;
动态多态性:运行时确定具体执行哪一项操作,主要是通过虚函数来实现的。一元运算符重载,如果是类的成员函数,则不需要形参,如果是类的友元函数,则需要一个类类型的形参。
二元运算符重载,如果是类的成员函数,则需要一个形参,如果是类的友元函数,则需要两个形参。
索引运算符重载不可以是友元函数
不允许通过函数返回值重载函数
重载:只有在同一个类定义中的同名成员函数才存在重载关系,主要特点是函数的参数类型和数目有所不同,但不能出现函数参数的个数和类型均相同,重载和成员函数是否是虚函数无关
覆盖:在派生类中覆盖基类中的同名函数,要求两个函数的参数个数、参数类型、返回类型都相同,且基类函数必须是虚函数。
隐藏:派生类中的函数屏蔽了基类中的同名函数,两个函数参数相同,但基类函数不是虚函数(和覆盖的区别在于基类是否是虚函数)。两个函数参数不同,无论基类函数是否是虚函数,基类函数都会被屏蔽(和重载的区别在于两个函数不在同一个类中)。
赋值运算符只能作为类的成员函数重载
不能被重载的运算符:. \ .* \ :: \ ?: \ sizeof \ typeid
C++中,能作为函数重载判断依据的是:参数类型、参数个数、const
如果同时在类中,对于函数名相同的const函数和非const函数能够构成重载
有的运算符只能作为成员函数重载
只能通过成员函数进行重载:
= 赋值运算符
() 函数调用运算符
[] 下标
-> 间接成员运算符重载多态和强制多态是指特定多态;
参数多态和包含多态是指通用多态。
在C++语言中,这种多态性可以通过强制多态、重载多态、类型参数化多态、包含多态4种形式来实现;
类型参数化多态和包含多态称为一般多态性,用来系统地刻画语义上相关的一组类型;
重载多态和强制多态称为特殊多态性,用来刻画语义上无关联的类型间的关系
C/C++错题集之重载相关
最新推荐文章于 2022-11-22 14:15:20 发布
