2015-02-28 3 views
1

Я пытаюсь понять указатели и область действия в ООП с помощью C++. Есть ли разница вообще между:Разрешение области :: vs this ->

class Class 
{ 
public: 
    void setVal (int value) { 
     this -> value = value; 
    } 
    int getVal(); 
private: 
    int value; 
}; 

и это:

class Class 
{ 
public: 
    void setVal (int value) { 
     Class::value = value; 
    } 
    int getVal(); 
private: 
    int value; 
}; 
+4

Полностью ортогональные вещи. Второй короткий для 'this-> Class :: value = true;'. –

+0

Вы прочитали свою книгу на C++, чтобы узнать, что делают каждый? –

+0

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

ответ

1

Две части кода вы Отправленные имеют одинаковое поведение, но не потому, что A->B и A::Bкогда-либо означает то же самое.

  • this->value это, своего рода, короткие для this->Class::value, потому что класс Class ищется сначала для value
  • Class::value это, своего рода, короткие для this->Class::value, потому что текущий объект предполагается при обращении к переменной-члена без this->.

this-> означает «дать мне что-нибудь часть это частности объекта Я говорю с вами из, пожалуйста»; Class::value означает «дайте мне то, что называется Class::value, пожалуйста».

Эта логика не совсем применима к функциям-членам, поскольку указание Class:: отключает виртуальную отправку. Таким образом, this->foo() - это не то же самое, что и this->Class::foo().

+0

Хорошо, это объясняет. Благодаря! Я предполагаю, что первый пример - это то, что чаще всего видно. –

+1

@ Джефф-Русс: Определенно. Редко можно квалифицировать члена с помощью класса «Class ::», когда этот член не статичен, и когда вы находитесь внутри функции-члена. –

Смежные вопросы