重载
重载
概念:在同一作用域中,函数名相同,参数列表不同的函数构成了重载关系
参数列表不同:
1.参数类型不同
2.参数个数不同
3.参数的顺序不同
1.普通函数重载:
void func(int);
void func(long);
void func(float);
void func(double);
2.成员函数重载:
class A
{
public:
void sum();
void sum(int x,int y);
private:
.............
};
void A::sum(){........}
void A::sum(int x,int y){........}
3.构造函数重载:
class A
{
public:
A(){...........}
A(int l,int w){...........}
A(int l,int w,int h){............}
private:
..........
};
4.运算符重载
1)除了类属关系运算符“.”、成员指针运算符“.*”、作用域运算符“::”、sizeof运算符和三目运算符“?:”以外,C++中的所有运算符都可以重载。
2)重载运算符限制在C++语言中已有的运算符范围内的允许重载运算符中,不能创建新的运算符。
3)运算符重载实质上是函数重载,因此编译程序对运算符重载的选择,遵循函数重载的选择原则。
4)重载之后的运算符不能改变运算符的优先级和结合性,也不能改变运算符操作数的个数及语法结构。
5)运算符重载不能改变该运算符用于内部类型对象的含义。它只能和用户定义类型的对象一起使用,或者用于用户自定义类型的对象和内部类型的对象混合使用时。
6)运算符重载是针对新类型数据的实际需要对原有运算符进行适当的改造,重载的功能应当与原有功能相类似,避免没有目的地使用重载运算符。
7)重载运算符的函数不能有默认的参数,否则就改变了运算符的参数个数。
8)重载运算符只能是用户自定义类型,否则就不是重载而是改变了现有的C++标准数据类型的运算符的规则了。
9)用户自定义类的运算符一般都必须重载后方可使用,但两个例外,运算符“=”和“&”不必用户重载。
10)运算符重载可以通过成员函数的形式,也可是通过友元函数,非成员非友员的普通函数。
class A
{
public:
void operator++(){++n;}
void operator++(){n++;}
private:
};
++i; 编译器会翻译成 i.operator++();
1+2;编译器会翻译成 operator+(int,int);