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

注意:

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

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

打印地址信息:

  

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

时间: 2024-10-14 09:04:06

引用成员变量 和 类对象做成员变量的相关文章

为什么基类指针和引用可以指向派生类对象,但是反过来不行?

为什么基类指针和引用可以指向派生类对象,但是反过来不行? 基类指针和引用 BaseClass *pbase = NULL; DerivedClass dclass; pbase = & dclass; 基类指针和引用可以指向派生类对象,但是无法使用不存在于基类只存在于派生类的元素.(所以我们需要虚函数和纯虚函数) 原因是这样的: 在内存中,一个基类类型的指针是覆盖N个单位长度的内存空间. 当其指向派生类的时候,由于派生类元素在内存中堆放是:前N个是基类的元素,N之后的是派生类的元素. 于是基类的

C++ Primer 学习笔记_22_类与数据抽象(8)--static 成员变量、static 成员函数、类/对象的大小

一.static 每个static数据成员是与类关联的对象,并不与该类的对象相关联!非static数据成员存在于类类型的每个对象中,static数据成员独立该类的任意对象存在. static成员函数没有this形参,它可以直接访问所属类的static成员,但是不能直接使用static成员! 1.static 成员变量 对于特定类型的全体对象而言,有时候可能需要访问一个全局的变量.比如说统计某种类型对象已创建的数量. 如果我们用全局变量会破坏数据的封装,一般的用户代码都可以修改这个全局变量,这时可

类对象作为成员

类对象内部嵌套类对象,被嵌套的对象成为内嵌对象.内嵌对象是该类对象的组成部分,当创建该对象时,其内嵌对象也被自动创建. C++中通过构造函数的初始化表为内嵌对象初始化.组合类的带有初始化表的狗仔函数的定义格式为: 类名::构造函数名(全部参数表):内嵌对象1(参数表1),内嵌对象2(参数表2),... {   构造函数体  }: 声明格式为: 类名::构造函数名(全部参数表): 组合类构造函数的执行顺序为: 1)按内嵌对象的声明顺序依次调用内嵌对象的构造函数: 2)执行组合类本身的构造函数.

C++类的成员函数(在类外定义成员函数、inline成员函数)

类的成员函数(简称类函数)是函数的一种,它的用法和作用和前面介绍过的函数基本上是一样的,它也有返回值和函数类型,它与一般函数的区别只是:它是属于一个类的成员,出现在类体中.它可以被指定为private(私有的).public (公用的)或protected(受保护的). 在使用类函数时,要注意调用它的权限(它能否被调用)以及它的作用域(函数能使用什么范围中的数据和函数).例如私有的成员函数只能被本类中的其它成员函数所调用,而不能被类外调用.成员函数可以访问本类中任何成员(包括私有的和公用的),可

关于派生类访问基类对象的保护变量的问题 --Coursera

https://class.coursera.org/pkupop-001/forum/thread?thread_id=350 郭天魁· 6 months ago 在课件中我们知道如下程序是不能编译通过的: class A{ protected: int x; }; class B:A{ void foo(){ A a; a.x=1; } }; 原因就在于x被protected了,所以在B类中不能访问A的对象的变量.但是如下程序可以编译通过: class A{ protected: int x

python入门第二十四天----成员修饰符 类的特殊成员

1 #成员修饰符 修饰符可以规定内部的字段.属性.方法等 是共有的成员,私有的成员 2 class Foo: 3 def __init__(self,name,age): 4 self.name=name 5 self.age=age #可以在外部直接访问 6 7 obj=Foo('Jack',22) 8 print(obj.name) 9 print(obj.age) 共有字段 1 #成员修饰符 修饰符可以规定内部的字段.属性.方法等 是共有的成员,私有的成员 2 class Foo: 3 d

内部类练习题(外部类访问内部类成员、内部类访问外部类成员、顶级类访问内部类成员)

package com.Summer_0429.cn; /** * @author Summer * 内部类实例: * 定义一只猫类,猫有: * 1.重量 * 2.猫的身体: * 1)颜色 * 2)显示猫的身体的信息(): * 3.显示猫的整体信息(): * 要求:创建一只小猫,显示它的整体信息. * */ class Cat{ private double weight; public Cat(double weight){ this.weight = weight; } //内部类:成员内部

类对象做函数参数(传值和传引用)

一.传引用 #include "stdafx.h" #include <iostream> using namespace std; class A { public: virtual void show(){cout<<"A"<<endl;} }; class B:public A { public: virtual void show(){cout<<"B"<<endl;} }; c

类和对象:成员属性、成员方法 — 学习笔记3

类成员  类成员的访问控制PHP5中对类成员属性或成员方法的访问控制,是通过在其前面添加关键字 public(公有).protected(保护)或 private(私有)来实现的,如果没有设置这些关键字,则该成员方法被默认设置为 public. 类的访问控制权限具体应用规则如下:·由 public 所定义的类成员可以在任何地方被访问.·由 protected 所定义的类成员可以被其他所在类的子类和父类访问.·由 private 所定义的类成员只能被其所在类访问. 成员属性 在类中定义的变量称为成