C++ 友元类成员的问题

2025-04-17 08:33:06
推荐回答(2个)
回答1:

答案是:当然可以。
不仅是一个函数,就是整个类也可以作为另一个类的友元。
正确程序如下:
#include
using namespace std;

class CBottle;

class CCarton
{
public:
CCarton::CCarton(const CBottle& aBottle);

private:
double m_Lenght;
double m_Width;
double m_Height;
};

class CBottle
{
public:
CBottle::CBottle(double height, double diameter) : m_Height(height), m_Diameter(diameter)
{}

private:
double m_Height;
double m_Diameter;

friend CCarton::CCarton(const CBottle& aBottle); // .............

};

CCarton::CCarton(const CBottle& aBottle) //友元函数的定义要放于后面
{
m_Height = aBottle.m_Height;
m_Lenght = 4.0 * aBottle.m_Diameter;
m_Width = 3.0 * aBottle.m_Diameter;
}

int main()
{
return 0;
}
注释中说得很清楚了。
以上程序在VS2005中正确运行。
补充一点:若是在VC6.0中运行,请使用头文件:#include
不要用using namespace std;这是VC6.O的一个经典bug。

回答2:

#include

using std::endl;
using std::cout;

class CBottle;

class CCarton
{
public:
CCarton(const CBottle& aBottle);
private:
double m_Lenght;
double m_Width;
double m_Height;
};

class CBottle
{
public:
CBottle::CBottle(double height, double diameter) : m_Height(height), m_Diameter(diameter)
{}
private:
double m_Height;
double m_Diameter;
friend CCarton::CCarton(const CBottle& aBottle); //.............
};

CCarton::CCarton(const CBottle& aBottle)
{
m_Height = aBottle.m_Height; // 不能访问CBottle类的私有成员
m_Lenght = 4.0 * aBottle.m_Diameter;
m_Width = 3.0 * aBottle.m_Diameter;
}

int main()
{
return 0;
}