📄 subject_16159.htm
字号:
<p>
序号:16159 发表者:邪 发表日期:2002-09-25 23:30:22
<br>主题:为什么这个问题在tc下和vc下不一样?
<br>内容:<BR>有个关于vc++的问题;<BR>#include <iostream.h><BR>#include <string.h><BR>class string{<BR> char *str;<BR>public:<BR> string(char *s)<BR> {<BR> str=new char[20];<BR> strcpy(str,s);<BR> }<BR> ~string()<BR> {delete str;}//为什么此处有问题?/<BR>};<BR>void main()<BR>{ string a1="hello";<BR>}<BR>在tc下正常;为什么在vc下有问题?<BR>vc编译时无错,为什么运行时出错???<BR>
<br><a href="javascript:history.go(-1)">返回上页</a><br><a href=http://www.copathway.com/cndevforum/>访问论坛</a></p>
<hr size=1>
<blockquote><p>
回复者:FullMoon 回复日期:2002-09-26 00:12:13
<br>内容:delete[] str;<BR><BR>void main()<BR>{ string a1="hello";//这句编译能通过吗<BR>
<br>
<a href="javascript:history.go(-1)">返回上页</a><br><a href=http://www.copathway.com/cndevforum/>访问论坛</a></p></blockquote>
<hr size=1>
<blockquote><p>
回复者:CDMA2000 回复日期:2002-09-26 09:06:29
<br>内容:对内部内型的char,用delete[] str和delete str;是一样的<BR>string a1="hello";这个语句导致string类调用拷贝构造函数<BR>而你定义的string类使用的是默认的编译器生成拷贝构造函数<BR>,他按位拷贝,没有new操做,所以当delete时出错!<BR>
<br>
<a href="javascript:history.go(-1)">返回上页</a><br><a href=http://www.copathway.com/cndevforum/>访问论坛</a></p></blockquote>
<hr size=1>
<blockquote><p>
回复者:邪 回复日期:2002-09-26 21:48:05
<br>内容:谢谢诸位热心帮助。<BR>能解释详细一点么?我不是定义了string的构造函数了么,<BR>还有啊,为什么能在tc下正常运行。
<br>
<a href="javascript:history.go(-1)">返回上页</a><br><a href=http://www.copathway.com/cndevforum/>访问论坛</a></p></blockquote>
<hr size=1>
<blockquote><p>
回复者:青松 回复日期:2002-09-27 16:47:15
<br>内容:加入下面语句在定义中。<BR>string(const string& s)<BR>{<BR> str = new char[20];<BR> strcpy(str,s.str);<BR>}
<br>
<a href="javascript:history.go(-1)">返回上页</a><br><a href=http://www.copathway.com/cndevforum/>访问论坛</a></p></blockquote>
<hr size=1>
<blockquote><p>
回复者:邪 回复日期:2002-09-28 13:29:36
<br>内容:不行啊,还是有错,<BR>能否给个完整的正确答案
<br>
<a href="javascript:history.go(-1)">返回上页</a><br><a href=http://www.copathway.com/cndevforum/>访问论坛</a></p></blockquote>
<hr size=1>
<blockquote><p>
<font color=red>答案被接受</font><br>回复者:CDMA2000 回复日期:2002-09-28 13:44:17
<br>内容:class String<BR>{<BR> public:<BR> String(const char *str = NULL);// 普通构造函数<BR> String(const String &other);// 拷贝构造函数<BR> ~String(void); // 析构函数<BR> String & operate =(const String &other);// 赋值函数<BR> private:<BR> char *m_data; // 用于保存字符串<BR>};<BR><BR><BR>// String的析构函数<BR>String::~String(void) <BR>{<BR> delete [] m_data; <BR> // 由于m_data是内部数据类型,也可以写成 delete m_data;<BR>}<BR><BR>// String的普通构造函数 <BR>String::String(const char *str) <BR>{<BR> if(str==NULL) <BR> {<BR> m_data = new char[1]; <BR> *m_data = ‘\0’; <BR> } <BR> else<BR> {<BR> int length = strlen(str); <BR> m_data = new char[length+1]; <BR> strcpy(m_data, str); <BR> }<BR>} <BR>// 拷贝构造函数<BR>String::String(const String &other) <BR>{ <BR> int length = strlen(other.m_data); <BR> m_data = new char[length+1]; <BR> strcpy(m_data, other.m_data); <BR>}<BR>// 赋值函数<BR>String & String::operate =(const String &other) <BR>{ <BR> // 检查自赋值 <BR> if(this == &other)<BR> return *this;<BR> // 释放原有的内存资源 <BR> delete [] m_data;<BR> <BR> // 分配新的内存资源,并复制内容 <BR> int length = strlen(other.m_data); <BR> m_data = new char[length+1]; <BR> strcpy(m_data, other.m_data);<BR> <BR> // 返回本对象的引用 <BR> return *this;<BR>} <BR>
<br>
<a href="javascript:history.go(-1)">返回上页</a><br><a href=http://www.copathway.com/cndevforum/>访问论坛</a></p></blockquote>
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -