如何解决互惠的朋友成员函数=循环包括声明
| 我在不同的h文件中定义了两个类,每个类都有一些私有函数。但是,我希望每个类都可以从另一个类的函数访问一个函数。 例如...//apple.h:
class Beets;
class Apple
{
public:
double ShadeUsed();
private:
void Fruit();
bool RedRoots();
friend bool Beets::BlueRoots(); //<--- Error b/c not declared yet
};
//beets.h
#include \"apple.h\"
class Beets
{
public:
double SunNeeded();
private:
void Leaves();
bool BlueRoots();
friend bool Apple::RedRoots();
};
目标是每个类中只有一个函数可以访问其他类的私有内容。例如,只有root函数才有权访问其他类的私有内容。但是,如果没有包括在内,我将无法实现相互的友谊。
例如,我曾经考虑过让整个Beets类成为Apple的朋友,这样,类预声明就足够了,但是我宁愿只允许一个函数私有访问。
有什么建议么?
提前致谢,
马特
(P.S.为什么回车“ \ Thanksthanks \”,\“ Matt \”之间不会产生换行符?)
解决方法
您可以使用朋友函数来调用成员函数。
//apple.h:
class Beets;
class Apple
{
public:
double ShadeUsed();
private:
void Fruit();
bool RedRoots();
friend bool Beets_BlueRoots(Beets* beets);
friend bool Apple_RedRoots(Apple* apple);
};
bool Apple_RedRoots(Apple* apple);
//beets.h
class Beets
{
public:
double SunNeeded();
private:
void Leaves();
bool BlueRoots();
friend bool Apple_RedRoots();
friend bool Beets_BlueRoots(Beets* beets);
};
bool Beets_BlueRoots(Beets* beets);
, 您似乎遇到了一些设计问题。我建议继承:
class A{
public:
virtual bool Roots();
}
class Apples : public A
{}
class Beets : public A
{}
现在,Apple和Beets都具有Roots功能,没有循环包含,并且它是公共的,因此它们可以互相访问(并且只有一个公共,所以您很安全)。您甚至不需要知道根是红色还是蓝色。而且,如果稍后再创建一个\“ Carrot \”类,则您的类也无需更改为也包含\“ OrangeRoots \”。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。