引用成员变量 和 类对象做成员变量

本文详细解析了C++中引用成员变量的概念及其初始化方式,通过对比引用成员变量与普通成员变量的区别,辅以具体代码实例,展示了不同情况下变量地址的变化情况。

注意:

1. 引用成员变量 必须在构造函数的初始化列表中进行初始化

2. 引用成员变量 并不为这个变量新辟空间;类对象做成员变量则是要对其新辟一段空间的。

如下代码中,使用date1做参数初始化person_ref和person_obj。person_ref的birth字段date1为同一个地址空间,而person_obj的birth字段则是新辟了一段空间。

#include <iostream>
using namespace std;

class Date
{
    int month, year;
public:
    Date(int m, int y):month(m), year(y){};
};

class Person_ref
{
    Date &birth;
    string name;
public:
    Person_ref::Person_ref(Date &b, string n): name(n), birth(b){};
    Date *GetBirth(){return &birth;}
    Date &GetBirth_(){return birth;}
};

class Person_obj
{
    Date birth;
    string name;
public:
    Person_obj::Person_obj(Date b, string n): name(n), birth(b){};
    Date *GetBirth(){return &birth;}
    Date &GetBirth_(){return birth;}
};

int main()
{
    Date date1(4, 1989), date2(5, 1990);
    Person_ref person_ref(date1, "Elva");        //person.birth字段成为为date1这段空间的别名
    Person_obj person_obj(date1, "Elva");        //为person_obj.birth字段重辟一段空间,然后拿date1的值对这段空间进行值赋值

    Date *pd = person_ref.GetBirth();
    Date newDate = person_ref.GetBirth_();       //为newDate重辟一段空间,然后取person_ref.birth中数据对其进行值赋值
    Date &refDate = person_ref.GetBirth_();      //refdate成为person_ref.birth, date1这段空间的新别称

    cout << "date1:           " << &date1 <<endl;
    cout << "person_ref.birth:" << person_ref.GetBirth()<<endl;
    cout << "person_obj.birth:" << person_obj.GetBirth()<<endl;
    cout << "refDate:         " << &refDate <<endl;
    cout << "tmpDate:         " << &newDate <<endl;

    refDate = date2;                             //对date1,person_ref.birth,refDate这段空间进行"值"赋值
    cout << "refDate after revalue:  " << &refDate <<endl;

    return 1;
}

今天还忙着别的,先这么记录下来,空暇下来了在再补充。

打印地址信息:

  

转载于:https://www.cnblogs.com/czl-sy/p/3794643.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值