Therapyx
@Therapyx
Data Science

Разница между this ->, (*this), className::, и «ничего» перед аттрибутами в ООП c++?

Представим, что у меня класс под именем Student. В header фаиле идет декларация вектора vecStudents. В cpp фаиле идут функции такого рода. В функции ниже я привел 4 различных примера.
Дак вот профессора смутило, что я везде писал Student::vecStudents.size(); или просто vecStudents.size(); после чего привел еще 2 других примера, но так и не смог обьяснить мне различия в каждом из вариантов(не говорю уже о "подобробном разьяснении") :) Поэтому вот в безысходности обращаюсь сюда с таким вопросом...

void Student::functionName(param) {
int size = (*this).vecStudents.size(); // или
int size = this -> vecStudents.size(); // или
int size = Student::vecStudents.size(); // или
int size = vecStudents.size(); // или
.... дальшейний код...
}


Хотелось бы конечно почитать более подробно, в каких случаях и зачем надо или нужно использовать один из вариантов))
  • Вопрос задан
  • 1048 просмотров
Решения вопроса 2
petermzg
@petermzg
Самый лучший программист
Когда вы используете this-> то вы его используете как указатель/ссылочный тип.
(*this) - это разыменование указателя, т.е. приведение к value типу.
И уже доступ к членам типа будет через точку.
Student::functionName() - это для вызова статических методов класса, т.е. без инстанса/обьекта класса
Ответ написан
Olej
@Olej
инженер, программист, преподаватель
Разница между this ->, (*this), className::, и «ничего» перед аттрибутами в ООП c++?

Как вам уже подсказали, разница между this->X и *this.X - "что в лоб, что по лубу"...
Но только (!) ... не всегда и та и другая синтаксическая форма "прокатит", и тогда приходится использовать или одну, или другую.
Например:
class X : public vector<int> {
}

в таком случае this->[...] - синтаксическая бессмыслица, и пишем (*this)[...].

className::X - относится только к static членам класса, здесь this->X - бессмыслица.

А «ничего» перед аттрибутами - это бессмыслица всегда ;-)

Вот и все ваши тревоги ;-)
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы