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


    注意:

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

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

    打印地址信息:

      

  • 相关阅读:
    记一次git fatal: Unable to find remote helper for 'https'问题的解决
    LambdaMART简介——基于Ranklib源码(二 Regression Tree训练)
    LambdaMART简介——基于Ranklib源码(一 lambda计算)
    用中文把玩Google开源的Deep-Learning项目word2vec
    Ubuntu18.04 一次性升级Python所有库
    CSAPP家庭作业(第二章)
    两个有序链表序列的合并
    sublime text 3 配置Python开发环境
    Java课程设计-泡泡堂(个人)
    二叉树的先序建立与遍历
  • 原文地址:https://www.cnblogs.com/czl-sy/p/3794643.html
Copyright © 2020-2023  润新知