友元是一種定義在類外部的普通函數,但它需要在類體內進行說明,為了與該類的成員函數加以區別,在說明時前面加以關鍵字friend。友元不是成員函數,但是它可以訪問類中的私有成員。友元的作用在於提高程序的運行效率,但是,它破壞了類的封裝性和隱藏性,使得非成員函數可以訪問類的私有成員。
友元函數 通過對象的引用可以直接 訪問私有變量,(不能直接訪問私有變量),而一般的函數則不可以。
#include<iostream.h>
class point
{
public:
friend void bb(point cc);
void dd(point cc);
private:
int aa;
};
void bb(point cc)
{int d = cc.aa;} //通過對象的引用可以直接訪問
void dd(point cc)
{int d=cc.aa;} //不可以直接訪問
下面給出一個比較實用的例子-重載運算符“+”:
1#include "stdafx.h"
2#include <iostream>
3
4class Complex //復數類
5{
6private://私有
7double real;//實數
8double imag;//虛數
9public:
10 Complex(double real=0,double imag=0)
11 {
12this->real=real;
13this->imag=imag;
14 }
15 friend Complex operator+(Complex &com1, Complex &com2);//友元函數重載雙目運算符+
16void showSum();
17};
18
19
20 friend Complex operator+(const Complex &com1,const Complex &com2)//友元運算符重載函數
21{
22return Complex(com1.real+com2.real,com1.imag+com2.imag);
23}
25void Complex::showSum()
26{
27 std::cout<<real;
28if(imag>0)
29 std::cout<<"+";
30if(imag!=0)
31 std::cout<<imag<<"i"<<std::endl;
32}
33
34int main()
35{
36 Complex com1(10,10),com2(20,-20),sum;
37 sum=com1+com2;//或sum=operator+(com1,com2)
38 sum.showSum();//輸出復數相加結果
39
40return0;
41 }
