当 类 是朋友具有相同名称的成员变量时会发生什么
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" 是他的。
在 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" 是他的。