1、运算符重载:
重载运算符的一般格式为:函数类型 operator 运算符名称(形参表列)
{对运算符的重载处理}
(1) C++不允许用户自己定义新的运算符,只能对已有的C++运算符进行重载;
(2) C++不允许重载的运算符(5个)
. (成员访问运算符)
.* (成员指针访问运算符)
:: (域运算符)
sizeof (长度运算符)
?: (条件运算符)
(3) 重载不能改变运算符运算对象的个数
(4) 重载不能改变运算符的优先级别
(5) 重载不能改变运算符的结合性
(6) 重载运算符的函数不能有默认的参数
(7) 重载的运算符必须和用户定义的自定义类型的对象一起使用,其参数至少应有一个是类对象(或类对象的引用)
(8) 用于类对象的运算符一般必须重载,但有两个例外,“=”和“&”不必用户重载
(9) 应使重载运算符的功能类似于该运算符作用于标准类型数据时所实现的功能
(10)运算符重载函数可以是类的成员函数,也可以是类的友元函数,还可以是即非类的成员函数也不是友元函数的普通函数
(11)一般将单目运算符重载为成员函数,将双目运算符重载为友元函数
(12)对“<<”和“>>”重载的函数形式:
istream & operator >> (istream & ,自定义类 &);
ostream & operator << (ostream & ,自定义类 &);
注:只能将重载“>>”和“<<”的函数作为友元函数或普通的函数,而不能将它们定义为成员函数
2、不同类型数据间的转换
(1) 标准类型数据间的转换
(2) 转换构造函数
1> 一般形式:类名(指定类型的数据){函数体}
如:Complex(double r) {real=r;imag=0;}
2> 转换构造函数只能有一个参数
(3) 类型转换函数(将一个类的对象转换为另一类型的数据)
1> 一般形式:operator 类型名()
{实现转换的语句}
3、#include<iostream>
using namespace std;
class Complex
{
public:
Complex(){real=0;imag=0;}
Complex(double r){real=r;imag=0;} //转换构造函数
Complex(double r,double i){real=r;imag=i;}
//operator double(){return real;} //类型转换函数
friend Complex operator + (Complex c1,Complex c2); //重载运算符“+”
void display();
private:
double real;
double imag;
};
Complex operator + (Complex c1,Complex c2)
{
return Complex(c1.real+c2.real,c1.imag+c2.imag);
}
void Complex::display()
{
cout<<"("<<real<<","<<imag<<"i)"<<endl;
}
int main()
{
Complex c1(3,4),c2(5,-10),c3;
c3=c1+2.5;
c3.display();
//double a;
//a=c1+c2;
//cout<<a<<endl;
return 0;
}