關於友元的使用

2021-09-28 06:21:17 字數 1526 閱讀 4040

1.友元的背景:c++提供了三大訪問控制許可權用於控制類外,類內,子類內對成員的訪問的控制.

2.友元就是乙個類對某個物件授予所有的訪問控制許可權

例如myclass有乙個私有的成員變數m_nnum在main函式中是不能直接通過物件來訪問的. 但是通過友元授權,main也能直接通過物件來訪問到這個類的所有成員.

3.友元能夠授予許可權的物件:

友元普通函式 : 將類的訪問許可權全部授予乙個普通的函式

class myclass;

int myclass::m_staticnum;

int main()

友元類 : 將本類的訪問許可權全部授予給另乙個類(在另乙個類的所有成員函式中都能直接訪問到授權類的所有成員)

class myclass;

int myclass::m_staticnum;

class class2

};

友元成員函式 : 將本類的訪問許可權全部授予給另乙個類某個成員函式(只有被授權的成員函式能夠訪問所有成員,沒有被授權的成員函式訪問不了)

互相引用的問題 : 在a類中使用了b類, b類又使用了a類. 類的宣告就無法正常宣告了.

class myclass2 ;

class myclass1 ;

void myclass2::fun1()

void myclass2::fun2()

如果是多個檔案的處理方式:

test1.**件

#pragma once

#include "test2.h"

class test1

;test2.**件

#pragma once

class test2

;test2.cpp檔案

#include "test2.h"

#include "test1.h"

test2::test2()

test2::~test2()

void test2::fun()

//在test2.**件中不包含test1.h的內容防止相互包含

//應該在test2.cpp檔案中進行包含test1.h的內容

//解決兩個類相互包含的問題

test2.**件

#pragma once

class test1;//這裡前置宣告test1是乙個類

class test2 ;

test2.cpp檔案

#include "test2.h"

test2::test2()

test2::~test2()

void test2::fun()

test1.**件

#pragma once

#include "test2.h"//另乙個類直接包含整個test2.**件

class test1

;

運算子過載有關-->轉至運算子過載

友元(友元函式 友元類 類成員函式的友元)

friend 友元機制 允許乙個類將對其非公有成員的訪問許可權授予指定的函式或者類。我們可以將友元大致分為3類 友元函式 是指某些雖然不是類的成員函式,但是能夠訪問這個類的所有成員的函式。比如我們下列的 include class test friend void show test rhs 宣告 ...

友元函式的使用

include includeusing namespace std class change friend void changes change p friend ostream operator ostream out,change p ostream operator ostream out...

關於 友元函式 的 種種

1 友元函式 通過物件的引用 可以直接 訪問私有變數,不能直接訪問私有變數 而一般的函式則不可以。2 友元是一種定義在類外部的普通函式,但它需要在類體內進行說明,為了與該類的成員函式加以區別,在說明時前面加以關鍵字friend。友元不是成員函式,但是它可以訪問類中的私有成員。友元的作用在於提高程式的...