重载操作符
1 定义
类型 operaotr+(参数1 ,参数2)
2 不能重载的操作符
:: .* ?:
3 重载操作符必须具有一个类类型的操作数
用于内置类型的操作符,起含义不能改变
int operator+(int,int)//error:内置类型的整形加法操作符不能改变
4 重载后操作符的优先级,结核性,操作数目不能改变
||,&&重载后不再具有短路求职特性
5 重载可定义为类的成员函数 或非成员函数
6 转换与类类型
c++提供一种机制,一个类可以定义自己的转换,应用于其类类型的对象,例如A+1;
可以定义A到int型的转换
转换函数必须是成员函数,不能定义返回类型,并且形参必须为空
虽然转换函数不能定义返回类型,但每个转换函数必须返回一个值
c++ primer 14章
1 定义
类型 operaotr+(参数1 ,参数2)
2 不能重载的操作符
:: .* ?:
3 重载操作符必须具有一个类类型的操作数
用于内置类型的操作符,起含义不能改变
int operator+(int,int)//error:内置类型的整形加法操作符不能改变
4 重载后操作符的优先级,结核性,操作数目不能改变
||,&&重载后不再具有短路求职特性
5 重载可定义为类的成员函数 或非成员函数
6 转换与类类型
c++提供一种机制,一个类可以定义自己的转换,应用于其类类型的对象,例如A+1;
可以定义A到int型的转换
#include<iostream>
using namespace std;
class Complex
{
private:
int real;
int virtu;
public:
Complex()
{
};
int GetReal() const;
int GetVirau() const ;
friend Complex operator +(const Complex a,const Complex b);
friend Complex operator -(const Complex a,const Complex b);
friend istream& operator >>(istream& in,Complex& s);
friend ostream& operator<<(ostream& out,const Complex& s);
inline bool operator ==( const Complex& b)
{
if((real == b.GetReal()) && ( virtu == b.GetVirau()))
return 1;
else
return 0;
}
inline bool operator !=(Complex b)
{
if((real != b.GetReal()) || ( virtu != b.GetVirau()))
return 1;
else
return 0;
}
};
int Complex::GetReal() const
{
return real;
}
int Complex::GetVirau() const
{
return virtu;
}
Complex operator +(const Complex a,const Complex b)
{
Complex c;
c.real = a.real + b.virtu;
c.virtu = a.virtu + b.virtu;
return c;
}
Complex operator -(const Complex a,const Complex b)
{
Complex c;
c.real = a.real - b.real;
c.virtu = a.virtu - b.virtu;
return c;
}
istream& operator >>(istream& in,Complex& s)
{
cout<<"please input the real";
in>>s.real;
cout<<"please input the virtu";
in>>s.virtu;
return in;
}
ostream& operator<<(ostream& out,const Complex& s)
{
cout<<"实数为:"<<endl;
out<<s.real<< "+"<<s.virtu <<"*"<<"i"<<endl;
return out;
}
int main()
{
Complex Complex1,Complex2;
cin>>Complex1;
cin>>Complex2;
cout<<Complex1 + Complex2<<endl;
cout<<Complex1 - Complex2<<endl;
if(Complex1 != Complex2)
cout<<"hello"<<endl;
else
cout<<"world"<<endl;
return 0;
}
转换函数必须是成员函数,不能定义返回类型,并且形参必须为空
虽然转换函数不能定义返回类型,但每个转换函数必须返回一个值
c++ primer 14章