類的訪問控制許可權如下:
訪問public
protected
private
同乙個類
yesyes
yes派生類
yesyes
no外部及外部類類
yesno
no接下來主要說一下外部函式及外部類幾種突破private訪問許可權的方法。
#include using namespace std;
class x
int geta()
void seta(int x)
int getb()
void setb(int x)
friend int setgetbx(x &,int x);
};int main()
int geta()
int getb()
friend int setgetbx(x & x,int temp); // 類內宣告友元函式
};int setgetbx(x & x,int temp)
int main()
int geta()
int getb()
};int main()
int geta()
int getb()
};class y
;void func(x* xptr)
int main()
int geta()
int getb()
};class y
;void func(x* xptr)
int main()
template//在x類內定義成員模板函式
void func(const t &t){}
int geta()
int getb()
};class y {}; //外部y類
template<>
void x::func(const y&) //特化 //attention
int main()
{ x s=x();
cout<
這種方法利用了x具有乙個成員模板的事實,通過特化函式模版,來打入敵人內部。**完全符合標準,標準也確保這種行為會按照編碼者的意圖行事。boost和loki中大量運用此手法。
參考:
C 突破private訪問許可權的黑科技
昨天,有位同事丟擲了乙個問題 乙個class內有乙個private屬性的struct型別,然後他想做的事情是,在繼承該class的子類中復用這個型別,但是由於該類似的private屬性,編譯是不通過的。因此就引入了乙個問題 如何突破class的private屬性限制 試圖破壞class的封裝性,有點...
C 突破private訪問許可權的黑科技
如何突破class的private屬性限制 試圖破壞class的封裝性,有點 逆天而行 的感覺。includeusing namespace std class x templatevoid func const t t const int getvalue friend void func x x...
如何訪問類中的private成員變數
總所周知,類中的private屬性的成員變數在類外是無法訪問的,今天我們 的就是如何在類外訪問private屬性的成員變數。我們先來看乙個簡單的例子 class stu private int x int y int main 通過上面的 我們可以知道,方法是把類物件的位址強制轉化為int 型別,因...