运算符重载实际上是函数的重载
函数类型 operate 运算符名称 (形参表)
Complex operate + (Complex &c2)
不能重载的运算符5个: sizeof 、 .(成员访问运算符)、 *(成员指针访问运算符)、 ::域运算符、 ?:条件运算符
1、重载不能改变操作对象个数
2、重载不能改变优先级原则
3、重载不能改变运算符结合性(左结合或右结合)
4、函数参数至少有一个是类对象或其引用,不能全是标准类型
Vc++提供的不带后缀.h 的头文件不支持把运算符重载函数作为友元函数,老版本带.h的头文件支持。gcc都支持
究竟把运算符重载函数作为类的成员函数好,还是友元函数好? 参考标准: (友元会破坏封装,尽量用成员函数)
复制运算符=、 下标运算符[ ]、函数调用运算符()、成员运算符->、 必须作为成员函数
流插入<< 和流提取 >>只能作为友元函数
一般将单目运算符和复合运算符重载为成员函数,将双目运算符重载为友元函数
重载插入流<< 和提取流>>
istream & operate >>(istream &, 自定义类 &);
ostream &operate << (ostream &,自定义类 &);
friend ostream & operate << (ostream &, Complex &);
ostream & operate << (ostream & output, Conplex &c)
{
output << c.real<< "+" << c.image<<"i"; //重载输出复数
return output; //cout通过地址传给output,也即返回cout
}
cout<<c3<<c2; //先执行cout<< c3 第一个参数和函数类型必须是ostream类型的引用,就是为了连续输出
重载运算符只能作用于一个指定类,不是应用于所有类
强制类型转换: 类型名(数据) int (9。2)
int i =6;
i = 7.5 + i; //i先转换为double型,得到的结果再转化为int型
转换构造函数:将一个其他类型数据转化为类的对象。只有一个形参、
默认构造函数:Complex();
用于初始化的构造函数;Complex(int,a int b);
用于复制对象的构造函数:Complex(Complex &c); //形参为本类对象的引用
转换构造函数:Complex(int a){real = a; image = 0;} //将int型参数a转化为类对象
c = c1 +Complex(1)
也可以将一个类转化为构造函数所在类
Teacher(Student &s){num = s.num; strcpy(name,s.name);sex = s.sex;} //将学生类对象转化为teacher类对象
s中name、num、sex必须为公用成员,否则不能被类引用
类型转化函数:将一个类的对象转化为另一个类型数据
operate 类型名() { }
operate double() {return real;} 函数名为operate double 和运算符重载一样operate +
类型转化函数只能作为成员函数,不能作为友元函数