2014-03-03 54 views
0

我在學習朋友的課程,我的問題是: 我想funcC3()設置並永久更改C1 :: a值,該怎麼做? 我想全球功能gfunc()能夠做到這一點,如何? 能否請你提供我這樣做的方式,因爲在他們沒有指定的書中?朋友在私人會員上操作的類C++

#include <iostream> 
using namespace std; 

class C2; 

class C3 
{ 
public: 
    void funcC3(int const& x) 
    { 
     cout << "in third class...: " << x << endl; 
    }; 
}; 

class C1 
{ 
private: 
    int a; 
public: 
    void funcC1() 
    { 
     cout << "inside C1 private thingie: " << a << endl; 
    }; 
    int C1::getcha(); 
    friend class C2; 
    friend int gfunc(int chair); 
    friend void C3::funcC3(int const& a); 
}; 

int C1::getcha() 
{ 
    return a; 
}; 

class C2 
{ 
public: 
    int a; 
}; 

**int gfunc(int ch)** 
{ 
    int chair = ch; 
    return chair; 
}; 

**int main()** 
{ 
    C1 obj1; 
    C3 obj3; 

    obj3.funcC3(10); 
    obj1.funcC1(); 

gfunc(12); 
cout << C1.geta() << endl; 
    system("pause"); 
} 

回答

0

我想funcC3()來設置,並永久地改變C1 ::一個值,該怎麼辦 呢?

聲明其在C1友元函數:

class C1; //forward declaration 

class C3 
{ 
//... 
    void funcC3(C1& c); 
}; 

class C1 
{ 
//... 
private: 
    int a; 
    friend void C3::funcC3(C1&); 
}; 

void C3::funcC3(C1& c) { c.a = 100;} 

我想全局函數gfunc()能夠做同樣的,怎麼樣?

同上:

class C1; 
void gfunc(C1& c); 

class C1 { 
//... 
private: 
    int a; 
    friend void gfunc(C1& c); 
}; 

void gfunc(C1& c) { c.a = 100;} 
+0

感謝,我有不好的做法:)。關於gfunc(),如果我想通過gfunc(C1&c,int par)的形式從main傳遞參數100,我得到了** errorC2248,它不能從類訪問私有參數。**我認爲最好能夠以這種方式參數化? – beginh

+1

你可以訪問C1實例的私有成員,如果它傳遞給它的朋友函數 – 4pie0

+0

你的意思是在這種情況下明確地通過private ** a **?因爲我認爲如果我們通過整個** C1&c **,其中也包括一個成員.. – beginh