繁体   English   中英

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

[英]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];

据我了解,朋友类将允许Room类访问House类的私有成员。 那么将使用哪个m_peopleInside?

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

这是一个实例变量。 因此,需要实例来对其进行操作。 如果没有提供实例,则它与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类访问House类的私有成员。

那是对的。

那么将使用哪个m_peopleInside

要访问House对象的m_peopleInside成员,您将需要House类型的对象或指针。

Room::update() ,如果仅使用m_peopleInside ,它将是Room成员变量,而不是House

在“ Room.Update()”中使用“ m_peopleInside”时,您肯定会使用“ Room”的数据成员。 您对“朋友”课程的理解不太正确。 为了清楚起见,假设您在“房间”类的方法之一(例如“ Update()”)中有一个来自“房屋”类的对象“ x”,那么下面的代码是正确的方法:

cout << x.m_peopleInside;

尽管“ m_peopleInside”在“房屋”中是私有的,但是可以通过Room的方法进行访问,因为“房屋”类声明“ Room”是他的朋友。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM