Синтаксис для доступа к разыменованным значениям объекта - PullRequest
1 голос
/ 29 октября 2019

В следующем коде:

#include <iostream>

class Foo{
   public:
    int *a, *b;
}
Foo::Foo(int x, int y) : a( new int ( x ) ) , b( new int ( y ) )
{
}
Foo test(1,2);

Если я хочу обработать разыменованное значение, хранящееся в переменной указателя a, почему я пишу:

std::cout << *test.a << std::endl; //method 1

а не:

std::cout << test.(*a) << std::endl; //method 2

Мне кажется, что мы получаем доступ к разыменованному значению a, то есть *a, и это переменная-член объекта test классаFoo поэтому метод 2 кажется более синтаксически правильным. Метод 1 (верный способ, который я считаю), кажется, разыменовывает весь test объект.

1 Ответ

4 голосов
/ 29 октября 2019

Причина, по которой вам нужно *test.a вместо test.(*a), заключается в том, что самого a не существует (из переменной в перспективе области действия). Он является членом Foo, поэтому для доступа к Foo::a вам нужно test.a. Затем вы применяете * к test.a, поскольку test.a является указателем.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...