当 类 是朋友具有相同名称的成员变量时会发生什么

What happens when Classes that are friends have same name member variables

在 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];

据我了解,朋友 class 将允许房间 class 访问房屋 class 的私人成员。那么将使用哪个m_peopleInside?

我应该补充一点,在这种情况下,m_peopleInside 被用作数组。

It's my understanding that the friend class will allow the Room class to access private members of the House class.

没错。

So which m_peopleInside would be used?

要访问 House 对象的 m_peopleInside 成员,您需要一个 House.

类型的对象或指针

Room::update()中,如果直接使用m_peopleInside,则为Room的成员变量,而不是House

这是一个实例变量。所以它需要一个实例来操作。如果没有提供实例,那么它与 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;
}

当你在"Room.Update()"里面使用"m_peopleInside"时,你肯定会用到"Room"的数据成员。你对 "friend" classes 的理解不太正确。为了清楚起见,假设您在 class "Room', like "Update() 的方法之一中有一个来自 class "House" 的对象 "x"例子。那么,下面的代码在这个方法中是正确的:

cout << x.m_peopleInside;

虽然 "m_peopleInside" 在 "House" 中是私有的,但可以从 Room 的方法中访问它,因为 class "House" 声明 "Room" 是他的。