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。友元不是成員函式,但是它可以訪問類中的私有成員。友元的作用在於提高程式的...