Страницы

Поиск по вопросам

воскресенье, 2 февраля 2020 г.

Указатель this в классе

#cpp


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

class A{
public:
  A(int in);
private:
  int tmp;
};

A::A(int in){
  this->tmp=in; // или же tmp=in;
}

    


Ответы

Ответ 1



Нет, не нужно. Вернее - не обязательно. Это было бы нужно, если бы параметр назывался так же как член класса: class A{ public: A(int tmp); private: int tmp; } A::A(int tmp){ this->tmp = tmp; }

Ответ 2



Это больше вопрос конвенции кода. this нужно использовать, если имя скрывает другой параметр. Ну или при работе с шаблонами: template struct A { int i; }; template struct B : A { int foo() { return this->i; } }; int main() { B b; b.foo(); } Без this-> не скомпилится, т.к. нужно сообщить явно компилятору, что используется i из A.

Ответ 3



Помимо уже сказанного в других ответах, наличие this-> сразу говорит читателю кода, что речь именно о члене класса, а не о какой-то другой глобальной/локальной переменной. Подобную проблему, правда лучше решать соглашениями по коду, например, начинать все имена членов с префикса m или добавлять суффикс в виде подчеркивания _. Но и это бывает не нужно, если работать исключительно в современных IDE с достаточным уровнем анализа кода — члены класса будут иметь отдельное от других сущностей выделение цветом/стилем шрифта.

Комментариев нет:

Отправить комментарий