運算符的重載

#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-重載運算符含義必須清除,不能有二義性。

發佈了45 篇原創文章 · 獲贊 25 · 訪問量 3073
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章