4.8.4 使用new创建动态结构(1)

2013-10-07 15:40:21 · 作者: · 浏览: 86

4.8.4  使用new创建动态结构(1)

在运行时创建数组优于在编译时创建数组,对于结构也是如此。需要在程序运行时为结构分配所需的空间,这也可以使用new运算符来完成。通过使用new,可以创建动态结构。同样,"动态"意味着内存是在运行时,而不是编译时分配的。由于类与结构非常相似,因此本节介绍的有关结构的技术也适用于类。

将new用于结构由两步组成:创建结构和访问其成员。要创建结构,需要同时使用结构类型和new。例如,要创建一个未命名的inflatable类型,并将其地址赋给一个指针,可以这样做:

 

这将把足以存储inflatable结构的一块可用内存的地址赋给ps。这种句法和C++(www.cppentry.com)的内置类型完全相同。

比较棘手的一步是访问成员。创建动态结构时,不能将成员运算符句点用于结构名,因为这种结构没有名称,只是知道它的地址。C++(www.cppentry.com)专门为这种情况提供了一个运算符:箭头成员运算符( >)。该运算符由连字符和大于号组成,可用于指向结构的指针,就像点运算符可用于结构名一样。例如,如果ps指向一个inflatable结构,则ps >price是被指向的结构的price成员(参见图4.11)。

 
图4.11  标识结构成员

提示:有时,C++(www.cppentry.com)新手在指定结构成员时,搞不清楚何时应使用句点运算符,何时应使用箭头运算符。规则非常简单。如果结构标识符是结构名,则使用句点运算符;如果标识符是指向结构的指针,则使用箭头运算符。

另一种访问结构成员的方法是,如果ps是指向结构的指针,则*ps就是被指向的值-结构本身。由于*ps是一个结构,因此(*ps).price是该结构的price成员。C++(www.cppentry.com)的运算符优先规则要求使用括号。

程序清单4.21使用new创建一个未命名的结构,并演示了两种访问结构成员的指针表示法。

程序清单4.21  newstrct.cpp

 
下面是该程序的运行情况: