2012-06-28 38 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 
相关问题