访问成员变量
在 Person
类中,m_Phone
是一个 Phone
对象。Phone
类中有一个名为 m_PhoneName
的成员变量,该变量保存了手机的名称。当我们想要访问 Phone
对象中的具体数据(如手机名称)时,需要通过 m_Phone.m_PhoneName
来访问 Phone
对象的成员变量 m_PhoneName
。
#include <iostream>
using namespace std;
class Phone {
public:
Phone(string name) : m_PhoneName(name) {
cout << "Phone构造" << endl;
}
~Phone() {
cout << "Phone析构" << endl;
}
string m_PhoneName;
};
class Person {
public:
// 初始化列表可以告诉编译器调用哪一个构造函数
Person(string name, string pName) : m_Name(name), m_Phone(pName) {
cout << "Person构造" << endl;
}
~Person() {
cout << "Person析构" << endl;
}
void playGame() {
cout << m_Name << " 使用" << m_Phone.m_PhoneName << " 牌手机! " << endl;
}
string m_Name;
Phone m_Phone;
};
void test01() {
// 当类中成员是其他类对象时,我们称该成员为对象成员
// 构造的顺序是:先调用对象成员的构造,再调用本类构造
// 析构顺序与构造相反
Person p("张三", "苹果X");
p.playGame();
}
int main() {
test01();
system("pause");
return 0;
}
在 playGame
函数中,我们使用了 m_Phone.m_PhoneName
:
void playGame() {
cout << m_Name << " 使用" << m_Phone.m_PhoneName << " 牌手机! " << endl;
}
原因解释
-
成员访问:
m_Phone
是一个Phone
类型的对象。m_Phone.m_PhoneName
是Phone
对象m_Phone
的成员变量,表示手机的名称。- 我们需要访问
Phone
对象中的m_PhoneName
成员变量,以获取和显示手机的名称。
-
类对象成员的使用:
Phone
类中的成员变量m_PhoneName
存储了手机的名称,这个信息是我们需要在playGame
函数中显示的。- 因此,直接访问
Phone
对象中的具体数据成员m_PhoneName
是必要的。
-
输出信息:
m_Phone.m_PhoneName
提供了具体的手机品牌名称,这是我们在输出信息中需要展示的内容。
进一步的例子
假设我们直接使用 m_Phone
,我们会发现这并不能实现我们想要的效果,因为 m_Phone
是一个对象,而不是一个字符串。代码如下:
void playGame() {
cout << m_Name << " 使用" << m_Phone << " 牌手机! " << endl; // 错误,不能直接输出对象
}
这将导致编译错误,因为 m_Phone
是一个 Phone
类型的对象,而不是一个可以直接输出的字符串。我们必须访问 Phone
对象的成员变量 m_PhoneName
来获取我们需要的字符串。
总结
使用 m_Phone.m_PhoneName
而不是直接使用 m_Phone
是因为我们需要访问 Phone
对象中的具体成员变量 m_PhoneName
,以便获取和显示手机的名称。直接使用 m_Phone
是不合适的,因为它是一个对象,而不是一个具体的数据成员。通过访问对象中的成员变量,我们可以准确地获取和操作对象内部的数据。