Одинарные указатели в ООП

Я студент, и я столкнулся с проблемой понять концепцию одночленных указателей в объектно-ориентированном программировании (ООП), и я много искал в Google, но не понял!

Не могли бы вы помочь мне разобраться в деталях?


person 01GeekGuy    schedule 06.07.2020    source источник
comment
Вы имеете в виду: class Foo { int* a; }; это?   -  person Dynamic Squid    schedule 06.07.2020
comment
@DynamicSquid Я понятия не имею об этом .. Можете ли вы объяснить это в общих чертах, что это такое?   -  person 01GeekGuy    schedule 06.07.2020
comment
Я достаточно хорошо разбираюсь в C ++ (если можно так выразиться), и я никогда не слышал термина «указатели на один элемент». Где ты это видел? Что ты имеешь в виду?   -  person Igor Tandetnik    schedule 06.07.2020
comment
@IgorTandetnik У меня в классе было такое, и я не понял, что говорит учитель !!   -  person 01GeekGuy    schedule 06.07.2020
comment
Я не понимаю, о чем вы говорите. Вы имеете в виду указатели, которые являются членами класса?   -  person Dynamic Squid    schedule 06.07.2020
comment
@DynamicSquid да, пожалуйста   -  person 01GeekGuy    schedule 06.07.2020
comment
А вы знаете, что такое класс?   -  person Dynamic Squid    schedule 06.07.2020
comment
@DynamicSquid да конечно   -  person 01GeekGuy    schedule 06.07.2020


Ответы (1)


Итак, после дальнейших разъяснений из комментариев вы, кажется, задаетесь вопросом о членах-указателях в классе, например:

class Foo
{
public:
  int* a;
};

Теперь указатели в классах в основном такие же, как и обычные переменные, но поскольку здесь вы имеете дело с памятью, у вас будут 3 дополнительные вещи (Правило трех):

  1. Деструктор
  2. Копировать конструктор
  3. перегружен operator=

Я не буду здесь вдаваться в подробности, но это должно выглядеть примерно так:

class Foo
{
private:
  int a*;

public:
  ~Foo() // destructor
  {
    delete a;
  }

  Foo(const Foo& cpy) // copy constructor
    : a(cpy.a) {}

  Foo& operator=(const Foo& cpy) // assignment
  {
    a = copy.a;
  }
};

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

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

Надеюсь это поможет :)

person Dynamic Squid    schedule 06.07.2020
comment
Проблема с этим ответом в том, что это не лучшая реализация правила трех. Этот код вызовет множественные проблемы с удалением. - person john; 06.07.2020
comment
Что ты имеешь в виду? - person Dynamic Squid; 06.07.2020