成員函式和友元函式實現一元運算子過載
阿新 • • 發佈:2019-02-03
使用友元函式實現一元運算子的過載
實現一元運算子的前置過載 即前置++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;
}