在C ++中,当我有以下
时会发生什么class House
{
public:
House();
~House();
private:
int* m_peopleInside;
friend class Room;
};
然后在House的构造函数中设置
m_peopleInside = new int[5];
m_peopleInside[4] = 2;
和
class Room
{
public:
Room();
~Room();
Update();
private:
int* m_peopleInside;
};
然后在Room.Update()中使用m_peopleInside这样的东西。
&m_peopleInside[4];
我的理解是,朋友班将允许Room类访问House类的私人成员。那么将使用哪个m_peopleInside? p>
我应该补充一点,在这种情况下,m_peopleInside被用作数组。
答案 0 :(得分:2)
这是一个实例变量。所以它需要一个实例来行动。如果没有提供实例,那么它与this->m_peopleInside
相同,这意味着它引用了调用该函数的实例。所以,例如,如果这是你的功能:
void Room::Update() {
// these two are the same, they null the member of the Room object
m_peopleInside = nullptr;
this->m_peopleInside = nullptr;
House h;
// should be pretty obvious what this does
h.m_peopleInside = nullptr;
}
答案 1 :(得分:1)
据我所知,朋友班将允许
Room
班级访问House班级的私人成员。
这是正确的。
那么将使用哪个
m_peopleInside
?
要访问m_peopleInside
对象的House
成员,您需要一个House
类型的对象或指针。
In {{ 1}},如果你只是使用Room::update()
,它将是m_peopleInside
的成员变量,而不是Room
。
答案 2 :(得分:0)
当您在“Room.Update()”中使用“m_peopleInside”时,您肯定会使用“Room”的数据成员。您对“朋友”课程的理解并不正确。为了说清楚,假设你在“Room”类的一个方法中有一个来自“House”类的对象“x”,例如“Update()”。那么,下面的代码在这里是正确的方法:
cout << x.m_peopleInside;
虽然“m_peopleInside”在“House”中是私有的,但可以从Room的方法访问,因为“House”类声明“Room”是他的朋友。