1. 程式人生 > >C++的魅力之操作符的過載,簡單的友元函式

C++的魅力之操作符的過載,簡單的友元函式

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) << ')';
}