t**g 发帖数: 1164 | 1 一道题目
要求从下面代码找出5个错误
我只找出来3个
所以请教一下大家
我找出来的3个:
1。class定义最后没有加";"分号
2。定义"="操作符的时候没有事先检查是否是self assignment
3. 定义init()函数里头,
data=new char[strlen(s)]这一句应该改成
data=new char[strlen(s)+1]? (因为c字符串好像默认尾端都有个额外的'\0')
class String
{
public:
String() { data = NULL; }
String( char * s)
{
init(s);
}
~String() { delete data; }
String ( String S )
{
init (S.data);
}
String& operator = ( const String & S |
a****l 发帖数: 8211 | 2 I don't think 1 is necessarily a problem , especially in a code section like
this. E.g., every book writes a class example in this way.
【在 t**g 的大作中提到】 : 一道题目 : 要求从下面代码找出5个错误 : 我只找出来3个 : 所以请教一下大家 : 我找出来的3个: : 1。class定义最后没有加";"分号 : 2。定义"="操作符的时候没有事先检查是否是self assignment : 3. 定义init()函数里头, : data=new char[strlen(s)]这一句应该改成 : data=new char[strlen(s)+1]? (因为c字符串好像默认尾端都有个额外的'\0')
|
X****r 发帖数: 3557 | 3 Copy constructor应该是String (const String& S)
init里没有检查s是否为NULL。
另外if (data) delete data;里的if (data)检查是不必要的,虽然也不是错误。
还有String(char *s)和init(char *s)完全可以接受const char *s,
当然这个也未必称得上错误。
【在 t**g 的大作中提到】 : 一道题目 : 要求从下面代码找出5个错误 : 我只找出来3个 : 所以请教一下大家 : 我找出来的3个: : 1。class定义最后没有加";"分号 : 2。定义"="操作符的时候没有事先检查是否是self assignment : 3. 定义init()函数里头, : data=new char[strlen(s)]这一句应该改成 : data=new char[strlen(s)+1]? (因为c字符串好像默认尾端都有个额外的'\0')
|
b********r 发帖数: 1080 | 4 copy constructor 要用 reference, 如String (String& X)
另外 destructor 应该 delete[] data; |
X****r 发帖数: 3557 | 5 对,要用delete[],刚才忘了这个了。
【在 b********r 的大作中提到】 : copy constructor 要用 reference, 如String (String& X) : 另外 destructor 应该 delete[] data;
|