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

225
01 декабря 2017, 06:05

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

class A{
public:
  A(int in);
private:
  int tmp;
};
A::A(int in){
  this->tmp=in; // или же tmp=in;
}
Answer 1

Нет, не нужно. Вернее - не обязательно. Это было бы нужно, если бы параметр назывался так же как член класса:

class A{
  public:
    A(int tmp);
  private:
    int tmp;
}
A::A(int tmp){
  this->tmp = tmp;
}
Answer 2

Это больше вопрос конвенции кода. this нужно использовать, если имя скрывает другой параметр.

Ну или при работе с шаблонами:

template<class T>
struct A {
   int i;
};
template<class T>
struct B : A<T> {
    int foo() {
        return this->i;
    }
};
int main() {
    B<int> b;
    b.foo();
}

Без this-> не скомпилится, т.к. нужно сообщить явно компилятору, что используется i из A<T>.

Answer 3

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

READ ALSO
не удается открыть источник &ldquo;cuda_runtime.h&rdquo;

не удается открыть источник “cuda_runtime.h”

пытаюсь попробовать данный пример https://githubcom/jordanbonilla/Read_GPU_Temperature_CUDA/blob/master/read_temps

454
Передача enum&#39;а в конструктор класса

Передача enum'а в конструктор класса

У меня есть класс, в конструктор которого я хочу передать параметры в виде enum

207
Перевод из std::wstring в число

Перевод из std::wstring в число

Если у меня есть указатель на строку в середине которой содержится числоЯ могу перевести в число примерно так:

199
Как соединить имя пути и файла?

Как соединить имя пути и файла?

Нужно сохранить файл скриншота в папке пользователя в Temp

202