2013-07-27 54 views
-1

我搜索了很多關於我無法理解的內容,但是我對於「朋友」和非成員功能存在的一些困難並沒有找到合適的答案。所以,在這裏它是...朋友和非成員功能困境

這是一個示例代碼,其模式類似於相應的代碼,我看到:

struct SampleClass 
{ 
    friend void foo1(SampleClass &rhs); 
    void foo2(); 
private: 
    int bar; 
}; 

void foo1(SampleClass& rhs) 
{ 
    rhs.foo2(); 
} 

void foo3(SampleClass& rhs) 
{ 
    rhs.foo2(); 
} 

int main() 
{ 
    SampleClass samp; 
    foo1(samp); //friend function 
    foo3(samp); //not a friend function but has the same effect 
    return 0; 
} 

爲什麼我們如何使用它是確定的「朋友非成員函數類「關鍵字是不是類似的功能?爲什麼不知道「朋友」函數或類可以訪問主機類的私有成員,第一個函數(「朋友」函數)訪問「bar」變量?

+0

我無法理解你的意思。 'foo2'顯然是公開的。嘗試輸入'rhs.bar = 5;'而不是'rhs.foo2();'然後你會看到不同之處。 – PeterT

+0

請包括您感到困惑的代碼。因爲這裏似乎沒有問題。 ('bar',唯一的'私人'的東西,永遠不會被訪問。) – Potatoswatter

回答

3

函數協議需要匹配。變化:

friend void foo1(); 

要:

friend void foo1(SampleClass& rhs); 
+0

這是正確的,但仍然不能解決我的問題 – atoipowered

+0

@ atoi.powered你是什麼意思有同樣的影響,void foo2()是一個公共函數... –

+0

你在哪裏定義foo2(),你可以發佈一些代碼? –