问题描述
|
我在不同的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 \”。