1. 程式人生 > >成員函式和友元函式實現一元運算子過載

成員函式和友元函式實現一元運算子過載

使用友元函式實現一元運算子的過載
實現一元運算子的前置過載 即前置++a;

#include <iostream>
using namespace std;

class Complex
{
private:
    int a;
    int b;
public: 
    Complex(int a= 0,int b = 0)
    {
        this->a = a;
        this->b =b;
    }
    //友元函式實現運算子++的過載
    friend  Complex& operator++(Complex &c1)    ;
    void
printCom(void) { cout<< a << "+" << b << 'i'<< endl; } protected: private: }; //對前置運算子進行過載 // ++c1 因為最終要得到c1本身函式返回一個引用 這樣才能夠實現返回引用 Complex& operator++(Complex &c1) { c1.a++; c1.b++; return c1; } int main() { Complex c1(1,2),c2(3
,4); Complex c3(0,0); ++c1; ++c1; c1.printCom(); cout << "hello world!" << endl; system("pause"); return 0; }

一元運算子過載實現一元運算子的後置過載即 a++;
後置和前置的區別就是後置的多了一個佔位符 剩下的就是C++編譯器自己呼叫了不用C++程式設計師管理管理

#include <iostream>
using namespace std;

class Complex
{
private
: int a; int b; public: Complex(int a= 0,int b = 0) { this->a = a; this->b =b; } //友元函式實現運算子前置++的過載 friend Complex& operator++(Complex &c1); //友元函式實現運算子後置++的運算子過載 friend Complex operator++(Complex &c1, int); void printCom(void) { cout<< a << "+" << b << 'i'<< endl; } protected: private: }; //對前置運算子進行過載 // ++c1 因為最終要得到c1本身函式返回一個引用 這樣才能夠實現返回引用 Complex& operator++(Complex &c1) { c1.a++; c1.b++; return c1; } //後置++的運算子過載 //因為後置++的形式和前置++的一樣 因此C++裡面提供一個佔位符的語法可以使用 //呼叫的時候C++編譯器會自動的呼叫帶有佔位符的後置 ++的過載函式 Complex operator++(Complex &c1, int) //返歸一個元素 //函式返回值不是函式過載的判斷標誌 { ////原理分析 //return c1; //c1.a++; //c1.b++; Complex tmp = c1; //保證是c1先使用在++ c1.a++; c1.b++; return tmp; } int main() { Complex c1(1,2),c2(3,4); Complex c3(0,0); // //++c1; //++c1; //c1.printCom(); //後置的++ c1++; c1.printCom(); cout << "hello world!" << endl; system("pause"); return 0; }

過載左移操作符 << 實現鏈式程式設計

#include <iostream>
using namespace std;

class Complex
{
private:
    int a;
    int b;
public: 
    Complex(int a= 0,int b = 0)
    {
        this->a = a;
        this->b =b;
    }
    //友元函式實現運算子前置++的過載
    friend  Complex& operator++(Complex &c1);
    //友元函式實現運算子後置++的運算子過載
    friend Complex operator++(Complex  &c1, int);
    friend ostream& operator<<(ostream &out,Complex &c1);
    void printCom(void)
    {
        cout<< a << "+" << b << 'i'<< endl;
    }


protected:
private:
};
//對前置運算子進行過載
//     ++c1  因為最終要得到c1本身函式返回一個引用 這樣才能夠實現返回引用

Complex& operator++(Complex &c1)
{
    c1.a++;
    c1.b++;
    return c1;
}

//後置++的運算子過載
//因為後置++的形式和前置++的一樣 因此C++裡面提供一個佔位符的語法可以使用
//呼叫的時候C++編譯器會自動的呼叫帶有佔位符的後置 ++的過載函式
Complex operator++(Complex  &c1, int)  //返歸一個元素    //函式返回值不是函式過載的判斷標誌
{
    ////原理分析
    //return c1;
    //c1.a++;
    //c1.b++;
    Complex tmp = c1;   //保證是c1先使用在++
    c1.a++;
    c1.b++;
    return tmp;
}
//函式過載  <<操作符      只能單個的輸出使用並不能使用多個  因為返回的不是自己
ostream& operator<<(ostream &out,Complex &c1)
{
    out << c1.a << "+" << c1.b << endl;
    return out;
}

int main()
{
    Complex c1(1,2),c2(3,4);
    Complex c3(0,0);
    // 
    //++c1;
    //++c1;
    //c1.printCom();
    //後置的++


    //2.  實現
    //cout.operator << (c1);  在 ostream 類中新增相應的  .operator<<
    //但是ostream的原始碼是拿不到的
    //因此輸入輸出;流的從在只能使用友元函式的方法實現
    cout<< c1 << c2 << endl; 
    // 左移操作符放入結合順序是從左到右的

    cout << "hello world!" << endl;
    system("pause");
    return 0;
}