2012-06-28 5 views
3

Это скорее вопрос синтаксической элегантности, но я изучаю C++ и играю с указателями. Если у меня есть класс, автомобиль, я могу создать указатель на новый экземпляр этого класса сСинтаксис C++ для переменных класса разыменования класса

Car * Audi = new Car; 

Если класс имеет переменную вес члена (без знака Int, например), я могу получить к нему доступ с любой

(*Audi).weight 

или

Audi->weight 

Если класс имеет переменный член возраст, который сам по себе является указателем, я могу получить к нему доступ с любым

*((*Audi).age) 

или

*(Audi->age) 

Есть ли другой способ, чем любой из этих двух (по общему признанию, не особо сложные) способы разыменования указателя? Я хотел бы думать

Audi->*age 

будет работать, но, увы, это не так.

(Я понимаю, что аксессоры, как правило, предпочтительнее, я просто интересуюсь.)

ответ

0

Синтаксический, нет, не, если вы не хотите, чтобы написать функцию или макрос, чтобы сделать это. Вы могли бы, но если вы спросите меня, просто используйте аксессоров. Кроме того, вы не хотите выделять большинство объектов в куче. Просто объявите их как type foo; или type foo = type() и пусть они будут в стеке. Вы не должны помещать вещи в кучу с динамическим распределением, если у вас нет особых оснований для этого, поскольку динамическое распределение имеет большие накладные расходы.

+0

@ FredOverflow: Ах! Благодарю. Я отредактирую. – Linuxios

0

Обычный способа вы бы получить доступ к значению указываемого по age является один вы упоминаете:

*(Audi->age) 

Существует совершенно иной смысл ->*, что связанно с указателем к-а-метода ,

В современном C++ вы обычно не вступаете в контакт с указателями слишком много. Его все в порядке, но, как только вы начнете писать реальный код, старайтесь избегать указателей как можно больше. Стек является вашим другом :)

+0

Между прочим, вам не нужны скобки. – TonyK

0

Никто не говорил об этом так:

Audi->age[0] 
+5

Работает, но семантически iffy. Глядя на это, я теперь ожидаю, что «возраст» будет указывать на массив, а не только на одну вещь. – cHao

3
*(Audi->age) 

Вам не нужно скобки, поскольку операторы префиксов имеют очень низкий приоритет:

*Audi->age 
Смежные вопросы