Почему указатель "this" используется для вызова производных функций-членов? - PullRequest
0 голосов
/ 06 ноября 2018

Читая тораторию о виртуальных функциях (не относящихся к этому примеру) по этой ссылке, я нашел этот код.

class Weapon
{
    public:
      void features()
         { cout << "Loading weapon features.\n"; }
};



class Bomb : public Weapon
{
    public:
       void features()
         { 
            this->Weapon::features(); 
            cout << "Loading bomb features.\n"; 
         }
};

Класс Weapon получен из класса Bomb, где вызывается функция-член Weapon.

Почему функция Weapon :: features () вызывается с указателем "this"? Разве это уже неявно дано?

1 Ответ

0 голосов
/ 06 ноября 2018

this дается неявно, и часто вопрос стиля заключается в том, писать его явно или нет. В вашем случае я бы сказал, что это не улучшает читаемость.

Однако в других случаях имеет смысл или даже необходимо явно написать this, чтобы избежать конфликтов имен между локальными переменными и членами данных. Рассмотрим, например, следующую программу:

class SomeClass {
public:
    void print(int amount) const {
        cout << amount << endl;
    }
    int amount = 10;
};

int main() {
    SomeClass c;
    c.print(20);
}

Выходные данные 20, если бы кто-то хотел получить доступ к элементу данных, нужно было бы написать cout << this->amount << endl. Да, возможно, плохой стиль. Но в техническом смысле явное this иногда даже требуется.

...