C++ 声明属性C++;通过引用或指针

C++ 声明属性C++;通过引用或指针,c++,pointers,reference,C++,Pointers,Reference,我想声明类的一些属性。我正在考虑为我想要在类中使用的属性创建私有变量 然后通过引用公开私有变量。但是我有一个指针,我们也可以传递私有变量的地址。因此类的用户可以修改变量 那么,通过引用或指针(如下面的示例所示)哪种方式更好呢 class ExampleClass { private: int age; public: //This function allows access via reference int& GetAgeByReference()

我想声明类的一些属性。我正在考虑为我想要在类中使用的属性创建私有变量

然后通过引用公开私有变量。但是我有一个指针,我们也可以传递私有变量的地址。因此类的用户可以修改变量

那么,通过引用或指针(如下面的示例所示)哪种方式更好呢

class ExampleClass
{

  private:
    int age;

  public:
    //This function allows access via reference
    int& GetAgeByReference()
      { 
         int& refAge= age;
         return refAge;
      }
    //This function allows access via pointer
    int* GetAgeByPointer()
      { 
         int* pointAge= &age; 
         return pointAge; 
      }


}
最好两者都不做:

  public:
    int GetAge() { return age; }
    void SetAge(int age) { this->age = age; }

通过这种方式,您可以添加健全性检查,如年龄不为负,并更改基础实现,而无需更改类的所有用户。

通过引用返回,原因有两个:

  • 通过指针返回意味着可以返回
    nullptr
    (但不会)。引用不能为null,因此用户知道他们将始终获得一个有效的对象(假设该对象行为良好)
  • 通过指针返回将使此函数的用户怀疑所指向对象的所有权。引用告诉用户,他们可以用这个对象做他们喜欢做的事情,而不需要做任何类型的内存管理

  • 是否应该像这样泄漏对象的内部是另一回事。

    只要有一个get和set方法。

    Get:应该是一个常量方法,并返回
    const ref
    /
    const int&GetAgeByReference()const{}

    设置:根据需要获取一个
    const
    ref并返回
    void或bool
    //
    void SetAgeByReference(const int&)

    @KerrekSB:谢谢你发现了这个错误。我很匆忙地写了这篇文章。如果你通过访问器授予完全访问权,为什么不把它变成一个公共变量呢?你意识到,通过返回一个非常量引用,你实际上违反了数据隐藏的原则?这似乎是一个非常复杂的设计。请不要写这么多的问题匆忙。