C++的魅力之操作符的過載,簡單的友元函式
阿新 • • 發佈:2018-12-15
1.簡單的友元函式
友元函式可以直接訪問private:
中的資料。
我們一定要認識到一點,相同class的各個object互為friends(友元)
比如:
class complex
{
public:
complex (double r = 0, double i = 0)
: re (r), im (i)
{ }
int func(const complex& param)
{ return param.re + param.im; }
private:
double re, im;
};
2.操作符的過載
實際上我們在設計一個操作符過載的時候,首先要考慮到它的傳參 然後就要想到返回值,這很重要,實際的功能我們到最後在編寫,比如我們去過載一個+=
this
指標的形式傳到過載裡面,我們實際上需要傳的就是右值,我們期望是用引用來傳,一般右值是不會變化的所以我們加const來限定。返回值我們期望是用引用,因為引用我們不用考慮它的型別,和void是一樣不過當有返回值時,void就顯的乏力了。
3.返回值一定不能用引用的情況
其實也算前面總結的情況,就是local變數時一定不能引用,這邊舉出一個特例。
inline complex operator + (const complex& x, const complex& y) { return complex (real (x) + real (y), imag (x) + imag (y)); } inline complex operator + (const complex& x, double y) { return complex (real (x) + y, imag (x)); } inline complex operator + (double x, const complex& y) { return complex (x + real (y), imag (y)); }
//例如complex(4,5)
complex() ;
他們都是臨時的變數
4.有些操作符時不可以時成員函式,被過載時,因為它太基礎了,我們無法在內部去過載它。比如<<
過載時我們需要讓它是非成員函式。
#include <iostream.h>
ostream&
operator << (ostream& os, const complex& x)
{
return os << '(' << real (x) << ','
<< imag (x) << ')';
}