-
// handle static member update if necessary
// same length
// allot space
// copy string to new location
制到String对象中。如果用户输入空行,break语句将终止输入循环。显示用户的输入后,程序使用成员函
数length()和operator<()来确定最短的字符串以及按字母顺序排列在最前面的字符串。程序还使用下标操
作符([])提取每条谚语的第一个字符,并将其放在该谚语的最前面。下面就是运行情况:
Hi, what's your name?
>> Misty Gutz
Misty Gutz, please enter up to 10 short sayings <empty line to quit>:
1: a fool and his money are soon parted
2: penny wise, pound foolish
3: the love of money is the root of much evil
4: out of sight, out of mind
5: absence makes the heart grow fonder
6: absinthe makes the hart grow fonder
7:
a: a fool and his money are soon parted
Pt penny wise, pound foolish
t: the love of money is the root of much evil
o: out of sight, out of mind
a: absence makes the heart grow fonder
a: absinthe makes the hart grow fonder
Shortest saying:
penny wise, pound foolish
First alphabetically:
a fool and his money are soon parted
This program used 11 String objects. Bye.
12.1.4 在构造函数中使用new时应注意的事项
至此,可以知道使用new来初始化对象的指针成员时必须特别小心。具体地说,应当这样做:
● 如果在构造函数中使用new来初始化指针成员,则应在析构函数中使用 delete。
● new 和 delete必须相互兼容。new对应于delete,new[ ]对应于 delete[]。
● 如果有多个构造函数,则必须以相同的方式使用new,要么都带中括号,要么都不带。因为只有
一个析构函数,因此所有的构造函数都必须与它兼容。不过,可以在一个构造函数中使用new来
初始化指针,而在另外一个构造函数中将指针初始化为空(NULL或0),这是因为delete(无论
是带中括号还是不带中括号)可以用于空指针。
NULL 还是0
空指针可以用0或NULL(在许多头文件中,NULL是一个被定义为0的符号常量)来表示。C程序
员通常使用NULL而不是0,因为这样易知它是一指针值(就像使用“\0”而不是0来表示空字符串一样,
前者指出这是一个字特值)。不过,C++传统上更喜欢用简单的0,而不是等价的NULL。
●应定义一个复制构造函数,通过深度复制将一个对象初始化为另一个对象。通常,这种构造函数
与下面类似:
String: :String (const String & st)
num_strings++:
len = st.len:
str = new char [len + 1];
std :: strcpy (str, st.str);
● 具体地说,复制构造函数应分配足够的空间来存储复制的数据,并复制数据,而不仅仅是数据的
地址。另外,还应该更新所有受影响的静态类成员。
● 应当定义一个赋值操作符,通过深度复制将一个对象复制给另一个对象。通常,该类方法与下面
类似:
String & String: :operator= (const String & st)