第10章、运算符重载
1. 运算符重载实质上就是函数的重载;
2,函数类型 operator 运算符名称(形参表列)
{对运算符的重载处理}
Operator + 就是函数名;
C1+c2被解释为c1.operator + c2
运算符重载能使用户程序易于编写,阅读和维护;
3,重载运算符的规则:
1. C++不允许用户自己定义新的运算符,只能对已有的C++运算符进行重载;
2. 不能重载的运算符只有5个:
成员访问运算符,成员指针访问运算符,域运算符,长度运算符,条件运算符;
3. 重载不能改变运算符运算对象的(即操作数)的个数;
4. 重载不能改变运算符的结合性;
5. 重载运算符的函数不能有默认的参数;
6. 重载的运算符必须和用户定义的自定义类型的对象一起使用,其参数至少应有一个是类对象(或类对象的引用);
7. 用于类对象的运算符一般必须重载,但有两个例外,运算符“=”和“&”不必用户重载;
4,c++规定,有的运算符(如赋值运算符,下标运算符,函数调用运算符)必须定义为类的成员函数,有的运算符则不能定义为类的成员函数(如流插入“<<”和流提取运算符”>>”,类型转换运算符)
5,一般将单目运算符重载为成员函数,将双目运算符重载为友元函数;
6,VC6.0没有完全实现C++标准,它所提供不带后缀.h的头文件不支持把成员函数重载为友元函数;
但老式的支持,所以可以改头文件;
#include<iostream.h>
7, char *p;
Cout<< p; //输出p所指向的字符串;
8,重载单目运算符,只有一个参数,如果运算符重载函数作为成员函数,则还可以省略此参数;
针对“++”和“--”这一特点,C++规定:如果在自增(自减)运算符重载函数中,增加一个Int型形参,就是后置自增(自减)运算符函数;
9,重载流插入运算符和流提取运算符
Istream&operator >>(istream &,自定义类&);
Ostream&operator << (ostream &,自定义类&);
10,只能重载>>和<< 的函数作为友元函数或者普通函数,而不能将他们定义为成员函数;
11,ostream&operator << (ostream& output,Complex &c)
{
output << "(" << c.real<< "+"<<c.image<<"i)"<<endl;
return output;
}
12,转换构造函数的作用就是将一个其他类型的数据转换成一个类的对象;
在类体中,可以有转换构造函数,也可以没有转换构造函数,视需要而定;
13,使用转换构造函数将一个指定的数据转换为类对象的方法如下:
1. 先声明一个类;
2. 在这个类中定义一个只有一个参数的构造函数,参数的类型是需要转换的类型;在函数体中指定转换的方法;
14,类型转换函数的作用是将一个类的对象转换成另一类型的数据;
Operator类型名()
{实现转换的语句}
在函数名前面不能指定函数类型,函数没有参数;
类型转换函数只能作为成员函数,因为转换的主体是本类的对象。
15, 如果运算符函数重载为成员函数,它的第一个参数必须是本类的对象,但它的第一个操作数不是类对象时,不能将运算符函数重载为成员函数;
基于这个原因,一般情况下将双目运算符函数重载为友元函数,单目运算符则多重载为成员函数;