2012-06-28 98 views
3

這更多的是語法優雅的問題,但我正在學習C++並使用指針進行遊戲。如果我有一個類,汽車,我可以創建一個指向這個類的一個新實例用於解引用類成員變量的C++語法

Car * Audi = new Car; 

如果類有一個成員變量的重量(一個unsigned 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

工程,但在語義上可以。看看這個,我現在預計'年齡'是指向一個數組,而不僅僅是一件事。 – cHao

3
*(Audi->age) 

你不需要括號,因爲前綴運營商有非常低的優先級:

*Audi->age 
相關問題