我知道可以在C ++中创建友元函数:
class box
{
friend void add(int num);
private:
int contents;
};
void add(int num)
{
box::contents = num;
return;
}
但有没有办法创建朋友类?
注意:我知道这段代码中可能存在很多错误,我不使用友元函数,而且对于该语言来说还是一个新手;如果有,请告诉我。
答案 0 :(得分:7)
是的 - 在class Box
的声明中,做
friend class SomeOtherClass;
SomeOtherClass
的所有成员函数都可以访问任何contents
的{{1}}成员(以及任何其他私人成员)。
答案 1 :(得分:2)
顺便说一下,设计指南是,如果一个类足够接近被宣布为朋友,那么它足够接近于在同一个头文件中声明为嵌套类,例如:
class Box
{
class SomeOtherClass
{
//some implementation that might want to access private members of box
};
friend class SomeOtherClass;
private:
int contents;
};
如果你不想在同一个头文件中将另一个类声明为嵌套类,那么也许你不应该(尽管你能够)将它声明为朋友。
答案 2 :(得分:0)
在你的代码中,你当前正在使用box成员'contents'作为add函数中的静态成员(box :: contents = num;)
你应该将内容声明为静态,如下所示:(你还必须初始化它然后......)
class box
{
friend void add(int num);
private:
static int contents;
};
int box::contents;
void add(int num)
{
box::contents = num;
return;
}
或者,更改add函数以接受box对象和int:
class box
{
friend void add(box *b, int num);
private:
int contents;
};
void add(box *b, int num)
{
b->contents = num;
return;
}