#include<iostream>
using namespace std;
class Int
{
public:
Int(int i=0):m_i(i)
{
}
public:
bool operator&(const Int &i);
bool operator>(const Int &i);
bool operator<(const Int &i);
//........
Int operator*(const Int &i);
Int operator/(const Int &i);
Int operator-(const Int &i);
Int operator*=(const Int &i);
Int operator/=(const Int &i);
Int operator-=(const Int &i);
Int operator+=(const Int &i);
Int operator+(const Int &i)
{
return Int(m_i+i.m_i);
}
public:
Int& operator++()//++a前++重載
{
m_i++;
return*this;
}
Int operator++(int a)//a++ 這個參數名a 可寫也可不寫 後++重載
{
Int tmp(m_i);
m_i++;
return tmp;
}
private:
int m_i;
};
void main()
{
Int a(5);
Int x;
x=++a;
x=a++;
}
//在後++中要通過一個臨時變量,因此前++效率高
/*
void main()
{
Int x;
Int y(1);
Int z(2);
x=y+z;
}
/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
*/
/*
//運算符重載的一般格式:
//返回值類型 類名::operator重載的運算符(參數表)
//{......}
//複數
class Complex
{
public:
Complex():m_real(0),m_imag(0)
{
}
Complex(int real,int imag)
{
m_real=real;
m_imag=imag;
}
~Complex()
{}
public:
void PrintComplex()const
{
cout<<"("<<m_real<<","<<m_imag<<")"<<endl;
}
Complex Add(Complex &c)
{
Complex cmp(m_real+c.m_real,m_imag+c.m_imag);
return cmp;
}
public:
Complex operator+(const Complex &c)
{
Complex cmp(m_real+c.m_real,m_imag+c.m_imag);
return cmp;
}
private:
int m_real;
int m_imag;
};
void main()
{
Complex c;
Complex c1(1,2);
Complex c2(3,4);
// c1.PrintComplex ();
// c2.PrintComplex ();
//c=c1.Add(c2);
//c=c1.operator + (c2);這句和下面是一樣的,只不過operator是關鍵字只不過不寫罷了
c=c1+c2;
}
在運算符重載中,基本上我們所見過的運算符都可以重載,當然也有例外的五個:
1-?:(三目條件運算符) 2- . 和 .*成員操作符 3- ::作用域操作符 4-sizeof 類型字長操作符
這五種運算符在C++中不允許被重載。
重載運算符有以下幾種限制:
1-不可臆造新的運算符;
2-不能改變運算符原有的優先級、結核性和語法結構,不能改變運算符操作數的個數;
3-運算符重載不宜使用過多;
4-重載運算符含義必須清除,不能有二義性。