C++中类型引用的属性

mar*_*nta -1 c++ oop attributes

我是一名Java开发人员.当我需要在课堂上提供参考资料时,我这样做:

public class Account{
    private int num;
    private Person client;
}
Run Code Online (Sandbox Code Playgroud)

但现在,我必须在C++中做同样的事情

我怎么能在.h文件中这样做?

其实我只有num属性:

class Account{
    private:
            int num;
    public:
            Account(int num);
            ~Account();
            int getNum();
            void setNum(int num);
}
Run Code Online (Sandbox Code Playgroud)

我应该如何将Person属性放在下面,我应该如何编译它?谢谢.

Dam*_*mon 5

至少有4种方法可以做到这一点:

  1. 使用指针(Person*),这是大多数C和C++程序员可能会做的事情,但是出于某些原因,许多人不赞成这种做法.您需要在不再需要时删除对象(如果多个对象可能引用同一个对象,这可能是非常重要的),并且在使用之前必须确保指针有效(可怕的nullpointer) .
  2. 使用reference(Person&),这将要求您在Account构造时初始化引用,并且您不能在对象的生命周期中稍后更改它.与指针不同,使用引用"看起来像"使用正常变量.
    在您的情况下,不能重新引用引用的限制可能是一个问题,因为可以想象一个帐户被另一个人占用(例如,如果原始所有者死亡).在这种情况下,您必须删除该Account对象并在其位置创建一个新对象.从积极的方面来说,保证引用是有效的(除非你特别恶意,并且真的试图欺骗编译器).
  3. 使用a shared_ptr<Person>,如果你想要一个引用计数的垃圾收集,就像你在Java中那样.许多Account对象可以共享相同的内容Person,当引用计数变为零时,它将被删除.
  4. 简单地使用a Person,这将创建一个副本,可能不是你想要的,除非每个Person只被一个Account人引用(不太可能,人们通常有几个帐户).