最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

C++中友元的詳解及其作用介紹

 更新時間:2021年09月07日 11:08:27   作者:我是小白呀  
這篇文章主要介紹了C++中友元的詳解及其作用介紹,本文給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下

概述

類的友元函數(shù) (friend) 是定義在類外部, 但是有權(quán)限訪問類的所有私有 (private) 成員和保護(hù) (protected) 成員.

在這里插入圖片描述

友元

我們先來復(fù)習(xí)一下公有成員和私有成員的概念:

  • 公有成員 (public) : 在類外可以訪問
  • 私有成員 (private): 只有本類中的函數(shù)可以訪問

友元 (friend) 可以訪問與其有好友關(guān)系的類中的私有成員 (有限制的共享).

友元包括友元函數(shù)和友元類:

  • 友元函數(shù): 如果在本類以外的其他地方定義的函數(shù), 在類體重用 friend 進(jìn)行聲明. 此函數(shù)就稱為本類的有元函數(shù), 友元函數(shù)可以訪問這個類中的私有成員
  • 友元類: 類 A 將另一個類 B 聲明為其友元類, 友元類 B 中的所有函數(shù)都是 A 類的友元函數(shù), 可以訪問 A 類中的所有成員

普通的友元函數(shù)

Time 類:

#ifndef PROJECT2_TIME_H
#define PROJECT2_TIME_H

class Time {
private:
    int hour;
    int minute;
    int second;
public:
    Time();
    Time(int, int, int);
    friend void display(Time &);  // display是Time類的friend函數(shù)
};

#endif //PROJECT2_TIME_H

Time.cpp:

#include <iostream>
#include "Time.h"
using namespace std;

Time::Time() : hour(0), minute(0), second(0) {}

Time::Time(int h, int m, int s) : hour(h), minute(m), second(s) {}

void display(Time &t) {
	// display不是Time類的成員函數(shù), 但是可以引用Time中的私有成員
    cout << t.hour << ":" << t.minute << ":" << t.second << endl;
}

main:

#include "Time.h"
#include <iostream>
using namespace std;

int main() {

    Time t1(8, 8, 8);
    display(t1);

    return 0;
}

友元成員函數(shù)

Time 類:

#ifndef PROJECT2_TIME_H
#define PROJECT2_TIME_H

class Date;  // 對Date類進(jìn)行提前引用聲明
class Time {
private:
    int hour;
    int minute;
    int second;
public:
    Time();
    Time(int, int, int);
    void display(Date &d);
};

#endif //PROJECT2_TIME_H

Date 類:

#ifndef PROJECT2_DATE_H
#define PROJECT2_DATE_H

#include "Time.h"

class Date {
private:
    int year, month, day;
public:
    Date(int, int, int);
    friend void Time::display(Date &d);
};

#endif //PROJECT2_DATE_H

Time.cpp:

#include <iostream>
#include "Time.h"
#include "Date.h"
using namespace std;

Time::Time() : hour(0), minute(0), second(0) {}

Time::Time(int h, int m, int s) : hour(h), minute(m), second(s) {}

void Time::display(Date &d) {
    cout << d.year << "年" << d.month << "月" << d.day << "日" <<endl;
    cout << hour << ":" << minute << ":" << second << endl;
}

main:

#include "Time.h"
#include "Date.h"
#include <iostream>
using namespace std;

int main() {

    Time t1(8, 8, 8);
    Date d1(2021, 5, 6);
    t1.display(d1);

    return 0;
}

輸出結(jié)果:

2021年5月6日
8:8:8

我們可以發(fā)現(xiàn) display 不是 Date 類的成員函數(shù), 但是可以引用 Date 中的私有成員.

友元類

Time 類:

#ifndef PROJECT2_TIME_H
#define PROJECT2_TIME_H

class Date;  // 對Date類進(jìn)行提前引用聲明
class Time {
private:
    int hour;
    int minute;
    int second;
public:
    Time();
    Time(int, int, int);
    void display(Date &d);
};

#endif //PROJECT2_TIME_H

Date 類:

#ifndef PROJECT2_DATE_H
#define PROJECT2_DATE_H

#include "Time.h"

class Date {
private:
    int year, month, day;
public:
    Date(int, int, int);
    friend class Time;  // 友元類
};

#endif //PROJECT2_DATE_H

總結(jié)

  • 如果在本類以外的地方定義了一個函數(shù)在類體中用 friend 對其進(jìn)行聲明, 此函數(shù)就稱為本類的友元函數(shù)
  • 友元函數(shù)可以訪問這個類中的私有成員
  • 友元函數(shù)可以是不屬于任何類的非成員函數(shù), 也可以是其他類的成員函數(shù)
  • 一個函數(shù)可以被多個類聲明為 friend, 這樣就可以引用多個類中的私有數(shù)據(jù).

友元的性質(zhì):

  • 友元的關(guān)系是單向的而不是雙向的
  • 友元的關(guān)系不能傳遞

友元的優(yōu)缺點:

  • 優(yōu)點: 有助于數(shù)據(jù)共享, 提高程序效率
  • 缺點: 破壞了封裝原則, 不利于信息隱藏

我們在使用友元的時候, 應(yīng)當(dāng)時刻考慮友元的缺點. 如果能用公共成員函數(shù)解決就不必用友元.

在這里插入圖片描述

到此這篇關(guān)于C++中友元的詳解及其作用介紹的文章就介紹到這了,更多相關(guān)C++友元內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

  • 淺談C++中的string 類型占幾個字節(jié)

    淺談C++中的string 類型占幾個字節(jié)

    本篇文章小編并不是為大家講解string類型的用法,而是講解我個人比較好奇的問題,就是string 類型占幾個字節(jié)
    2013-08-08
  • C/C++?Qt?數(shù)據(jù)庫QSql增刪改查組件應(yīng)用教程

    C/C++?Qt?數(shù)據(jù)庫QSql增刪改查組件應(yīng)用教程

    Qt?SQL模塊是Qt中用來操作數(shù)據(jù)庫的類,該類封裝了各種SQL數(shù)據(jù)庫接口,可以很方便的鏈接并使用。本文主要介紹了Qt數(shù)據(jù)庫QSql增刪改查組件的應(yīng)用教程,感興趣的同學(xué)可以學(xué)習(xí)一下
    2021-12-12
  • 簡單總結(jié)C++中的修飾符類型

    簡單總結(jié)C++中的修飾符類型

    這篇文章主要介紹了C++中的修飾符類型總結(jié),是C++入門學(xué)習(xí)中的基礎(chǔ)知識,需要的朋友可以參考下
    2016-05-05
  • C語言如何實現(xiàn)可變參數(shù)詳解

    C語言如何實現(xiàn)可變參數(shù)詳解

    這種可變參數(shù)可以說是C語言一個比較難理解的部分,下面這篇文章主要給大家介紹了關(guān)于C語言如何實現(xiàn)可變參數(shù)的相關(guān)資料,需要的朋友可以參考下
    2021-07-07
  • C++中CopyFile和MoveFile函數(shù)使用區(qū)別的示例分析

    C++中CopyFile和MoveFile函數(shù)使用區(qū)別的示例分析

    這篇文章主要介紹了C++中CopyFile和MoveFile函數(shù)使用區(qū)別的示例分析,CopyFile表示將文件A拷貝到B,如果B已經(jīng)存在則覆蓋,MoveFile表示將文件A移動到。對此感興趣的可以來了解一下
    2020-07-07
  • C++ STL priority_queue自定義排序?qū)崿F(xiàn)方法詳解

    C++ STL priority_queue自定義排序?qū)崿F(xiàn)方法詳解

    這篇文章主要介紹了C++ STL priority_queue自定義排序?qū)崿F(xiàn)方法詳解,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2021-03-03
  • C語言中K-means算法實現(xiàn)代碼

    C語言中K-means算法實現(xiàn)代碼

    這篇文章主要為大家詳細(xì)介紹了C語言中K-means算法的實現(xiàn)代碼,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2018-02-02
  • C++ 情懷游戲貪吃蛇的實現(xiàn)流程詳解

    C++ 情懷游戲貪吃蛇的實現(xiàn)流程詳解

    貪吃蛇是曾經(jīng)諾基亞手機(jī)上很經(jīng)典很經(jīng)典的傳統(tǒng)老游戲,80.90后的童年時不多的游戲之一,跟電腦上的掃雷一樣,下面來從貪吃蛇手機(jī)游戲的前世今生講起
    2021-11-11
  • vc++實現(xiàn)的tcp socket客戶端和服務(wù)端示例

    vc++實現(xiàn)的tcp socket客戶端和服務(wù)端示例

    這篇文章主要介紹了vc++實現(xiàn)的tcp socket客戶端和服務(wù)端示例,需要的朋友可以參考下
    2014-03-03
  • 最新評論

    长海县| 滨海县| 札达县| 鞍山市| 贺州市| 井研县| 建平县| 苏尼特左旗| 长春市| 吴川市| 磐石市| 文水县| 通州区| 长沙县| 巴彦淖尔市| 冀州市| 福建省| 栾川县| 南宫市| 宜兰市| 桂阳县| 庆元县| 民县| 泰安市| 时尚| 黎城县| 昂仁县| 铁力市| 南澳县| 平昌县| 潞西市| 潢川县| 高台县| 海城市| 芒康县| 台北市| 日照市| 道孚县| 宝清县| 方山县| 合肥市|