2014-03-03 53 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