类对象作为成员

访问成员变量

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;
}

原因解释

  1. 成员访问

    • m_Phone 是一个 Phone 类型的对象。
    • m_Phone.m_PhoneNamePhone 对象 m_Phone 的成员变量,表示手机的名称。
    • 我们需要访问 Phone 对象中的 m_PhoneName 成员变量,以获取和显示手机的名称。
  2. 类对象成员的使用

    • Phone 类中的成员变量 m_PhoneName 存储了手机的名称,这个信息是我们需要在 playGame 函数中显示的。
    • 因此,直接访问 Phone 对象中的具体数据成员 m_PhoneName 是必要的。
  3. 输出信息

    • 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 是不合适的,因为它是一个对象,而不是一个具体的数据成员。通过访问对象中的成员变量,我们可以准确地获取和操作对象内部的数据。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值