当作为朋友的类具有相同名称的成员变量时会发生什么
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;
};
然后在房间里。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;
}
据我所知,friend类将允许
Room
类访问House类的私有成员。
这是正确的。
那么将使用哪种
m_peopleInside
?
要访问House
对象的m_peopleInside
成员,您需要一个类型为House
的对象或指针。
在Room::update()
中,如果只使用m_peopleInside
,它将是Room
的成员变量,而不是House
。
当您在"Room.Update()"中使用"m_peopleInside"时,您肯定会使用"Room"的数据成员。你对"朋友"类的理解不太正确。为了弄清楚,假设你在类"Room"的一个方法中有一个来自类"House"的对象"x",比如"Update()"。那么,下面的代码在这个方法中是正确的:
cout << x.m_peopleInside;
尽管"m_peopleInside"在"House"中是私有的,但它可以从Room的方法访问,因为类"House"声明"Room"是他的朋友。
相关文章:
- 将成员变量添加到共享库中的类中,不会破坏二进制兼容性吗
- 具有奇怪重复模板模式的派生类中的成员变量已损坏
- C++预处理会生成变量成员、资源库和映射
- 局部堆栈变量成员的返回值优化
- Google Mock:在目标类的构造函数中实例化的模拟私有变量成员
- 使用指向结构变量成员的指针访问该结构的成员的地址
- 如果派生类仅包含自动变量成员,是否有必要具有虚拟驱动器
- 线程安全性和静态变量/成员功能
- "static const char array"可以在 C 语言上包含变量成员吗
- 仅用于内部目的的类的所有变量/成员的技术术语是什么
- 如何强制转换变量成员以将其作为函数的引用参数传递
- 类中未声明变量成员函数
- 在 main 中初始化类的 "static const" 类型变量成员的更好方法
- c++模板类静态const变量成员作为映射键给出未定义引用
- 在类中初始化结构变量成员会导致分割错误
- 在c++中建模变量成员类型
- 模板私有静态变量成员的未定义符号
- 不能访问公共静态变量成员
- 常量变量成员在C++有什么用?
- g++ 4.8.2坚持简单变量成员是数组