Объявление свойства C ++ по ссылке или указателю

0

Я хочу объявить некоторые свойства класса. Я думаю о создании частных переменных для свойств, которые я хочу в классе.

А затем разоблачение частных переменных по ссылке. Но по указателю я также могу передать адрес частной переменной. Таким образом, пользователь класса может изменить переменную.

Итак, какой путь был бы лучше с помощью ссылки или указателя, как показано в примере ниже?

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


}
  • 0
    @KerrekSB: Спасибо за ошибку. Я написал это в спешке.
  • 3
    Если вы предоставляете полный доступ через ваши средства доступа, почему бы просто не сделать его общедоступной переменной?
Показать ещё 2 комментария
Теги:
pointers
reference

3 ответа

3
Лучший ответ

Вернитесь по ссылке по двум причинам:

  1. Возврат указателем предполагает, что nullptr может быть возвращен (но этого не будет). Ссылка не может быть нулевой, поэтому пользователь знает, что они всегда получат действительный объект (при условии, что он хорошо себя ведет).
  2. Возвращаясь по указателю, пользователь этой функции задается вопросом о праве собственности на объект, на который указывает. Ссылка указывает пользователю, что они могут делать то, что им нравится с этим объектом, и им не нужно заниматься каким-либо управлением памятью.

Если вы вообще должны просачивать внутренности своего объекта, это совсем другое дело.

5

Лучше не делать ни того, ни другого:

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

Таким образом, вы можете добавить проверки здравомыслия, такие как возраст, не являющийся отрицательным, и изменить базовую реализацию, не изменяя всех пользователей класса.

0

Просто используйте методы get и set.

Get: должен быть постоянным методом и возвращать константу const ref//const int & GetAgeByReference() const {};
Set: Возьмите const ref и верните void or bool мере необходимости. //void SetAgeByReference(const int &)

Ещё вопросы

Сообщество Overcoder
Наверх
Меню