Что следующий код означает в C ++? - PullRequest
4 голосов
/ 29 марта 2011
struct Dog{  
  int a;  
  int b;  
};

int Dog::*location = &Dog::a  
Dog* obj1 = new Dog;  
obj1->*location = 3;  

что означает &Dog::a? 1003 *

Ответы [ 3 ]

4 голосов
/ 29 марта 2011

Создает указатель на член, который похож на указатель на член данных класса, но экземпляр класса еще не определен, это просто смещение.(Обратите внимание, что в сочетании с множественным наследованием или виртуальным наследованием это становится немного сложнее, чем простое смещение. Но компилятор прорабатывает детали.)

Обратите внимание на оператор разыменования указателя на член ->* используется в последней строке, где экземпляр класса объединяется с указателем на член для получения конкретного члена данных конкретного экземпляра.

2 голосов
/ 29 марта 2011

Переменная location известна как «указатель данных элемента». Это указатель на что-то внутри структуры, но он не имеет смысла, если он не используется с фактическим указателем объекта. Использование *location само по себе не будет достаточным количеством информации для определения фактического адреса, но obj1->*location относится к фактическому местоположению.

0 голосов
/ 29 марта 2011

& означает взять адрес чего-либо.

...