1. 程式人生 > >操作符過載的兩種用法(前置後置++)

操作符過載的兩種用法(前置後置++)

一.操作符過載基礎:

運算子函式是一種特殊的成員函式或友元函式

1.過載為類成員函式,解釋為

ObjectL.operator op(ObjectR)

     左運算元由ObjectL通過this指標傳遞,右運算元由引數ObjectR傳遞

2.過載為友元函式,解釋為:

operator op(ObjectL,ObjectR)

   左右運算元都由引數傳遞

3.為什麼要有操作符過載

   a=a+b;//int是基礎型別,c++編譯器已經為這些型別提供+操作

Complex c1=c1+c2;//Complex是自定義型別,編譯器根本不知道如何加,但c++編譯器會給你提供一個機制,讓你實現自定義型別+

例子程式碼如下,重要的地方有標記:

class Complex{


friend Complex operator+(Complex &c1, Complex &c2);
friend Complex& operator++( Complex &c2);//前置++友元函式的實現
public:
Complex(int a = 0, int b = 0)
{
this->a = a;
this->b = b;
}
void print()
{
cout << a << "+" << b << "i" << endl;
}
private:
int a;
int b;
//通過類的成員函式實現-操作;左運算元被隱藏在this指標,右運算元就在引數中


public:
Complex operator-(Complex &c2)
{
Complex tmp;
tmp.a = this->a - c2.a;
tmp.b = this->b - c2.b;
return tmp;
}
public:
Complex& operator--()//通過類的成員函式實現--操作;左運算元被隱藏在this指標,右運算元就在引數中
{
this->a--;
this->b--;
return *this;
}
};
Complex operator+(Complex &c1, Complex &c2)//全域性函式實現+操作寫法
{
Complex tmp;
tmp.a = c1.a + c2.a;
tmp.b = c1.b + c2.b;
return tmp;
}
Complex& operator++( Complex &c2)//全域性函式實現++操作寫法

{
c2.a++;
c2.b++;
return c2;
}
void main()
{
Complex c1(1, 2), c2(3, 4);
Complex c3;
c3.print();
Complex c4 = operator+(c1,c2);//友元函式的寫法
c4.print();
Complex c7= c1+c2;//友元函式的寫法
c7.print();
Complex c5 =c1.operator-(c2);//累的成員函式寫法
c5.print();
Complex c6 = c1-c2;
c6.print();
++c2;
c2.print();
--c2;
c2.print();


system("pause");
}

//後置--

Complex operator--(int)

{

Complex tmp = *this;

this->a --;

this->b --;

return tmp;

}

//後置++

Complex operator++(int)

{

Complex tmp = *this;

this->a ++;

this->b ++;

return tmp;

}

二.操作符過載的三個步驟(類成員函式方法進行的時候)

//目標:通過類的成員函式,完成操作符過載

1.要承認操作符過載是一個函式,完成操作符過載

2.寫出函式呼叫語言 c1.operator-(c2)

3.完善函式原型

全域性函式過載操作符友元用武之地

原因:

cout<<c1<<"鏈式程式設計測試"<<endl;

 operator<<(cout,c1);

 cout.operator<<(c1);