友員函數

友元函數分為友元全局函數和友元成員函數
先看友元全局函數:
定義一個Time類

#ifndef TIME_H
#define TIME_H
class Time
{
public:
    Time(int h, int m, int s)
{
    m_iHour = h;
    m_iMinute = m;
    m_iSecond = s;
}
private:
    int m_iHour;
    int m_iMinute;
    int m_iSecond;
};
#endif // !TIME_H

在main函數中,定義一個打印時間的函數printTime(),由于Time中的數據成員被限制為私有,因此全局函數是不能訪問的。

#include "time.h"
#include <iostream>
using namespace std;
void printTime(Time &t);
int main()
{
    Time t(6, 34, 25);
    printTime(t);

    system("pause");
    return 0;
}
void printTime(Time &t)
{
    cout << t.m_iHour << ":" << t.m_iMinute << ":" << t.m_iSecond << endl;

}

此時編譯會出錯。
因此友元函數要出場了,為了能訪問Time類中的私有數據成員,需要在Time類中聲明一個友元全局函數,如下:

#ifndef TIME_H
#define TIME_H
class Time
{
    friend void printTime(Time &t);

public:
    Time(int h, int m, int s)
         {
    m_iHour = h;
    m_iMinute = m;
    m_iSecond = s;
        }
private:
    int m_iHour;
    int m_iMinute;
    int m_iSecond;
};
#endif // !TIME_H

如此,編譯就能通過了!!
接下實現一個友元成員函數。友元成員函數要求有兩個類才能實現,因此再定義一個Match類


最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內容

  • 前言 把《C++ Primer》[https://book.douban.com/subject/25708312...
    尤汐Yogy閱讀 9,541評論 1 51
  • 重新系統學習下C++;但是還是少了好多知識點;socket;unix;stl;boost等; C++ 教程 | 菜...
    kakukeme閱讀 20,033評論 0 50
  • 第一天 一.內聯函數(inline) 函數調用的時候需要建立棧內存環境,進行參數傳遞,并產生程序執行轉移,這些工作...
    陳果123閱讀 1,146評論 0 1
  • 1.面向對象的程序設計思想是什么? 答:把數據結構和對數據結構進行操作的方法封裝形成一個個的對象。 2.什么是類?...
    少帥yangjie閱讀 5,052評論 0 14
  • 復盤和天賦組組長-藝馨的約聊 Angie的價值變現研習社是一個神奇的地方,這里的人...
    ea4e3195285d閱讀 711評論 0 4