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
下面是该程序的运行情况: