📄 subject_15767.htm
字号:
<p>
序号:15767 发表者:李 发表日期:2002-09-21 11:14:39
<br>主题:请教各位一个拷贝构造函数和赋值运算符重载的问题。
<br>内容:编译时非法操作,不知为何?<BR>#include<iostream.h> <BR>#include<string.h><BR>//#include<vector><BR>//using namespace std;<BR>class str<BR>{<BR> char *name;<BR>public:<BR> str(){};<BR> str(const char *na)<BR> {<BR> if(na==NULL)<BR> {<BR> name=new char[1];<BR> *name='\0';<BR> }<BR> else<BR> {<BR> name=new char[strlen(na)+1];<BR> strcpy(name,na);<BR> }<BR> }<BR> str(const str &n)<BR> {<BR> name=new char[strlen(n.name)+1];<BR> strcpy(name,n.name);<BR> }<BR> ~str()<BR> {<BR> delete [] name;<BR> cout<<"destruction call!"<<endl;<BR> }<BR> void show()const<BR> {<BR> cout<<name<<endl;<BR> }<BR> str & operator = (const str &s);<BR>};<BR>str & str::operator = (const str &s)<BR>{<BR> if(this==&s)<BR> return *this;<BR><BR> delete [] name;<BR> name=new char[strlen(s.name)+1];<BR> strcpy(name,s.name);<BR> return *this;<BR> <BR>} <BR>void main()<BR>{<BR> str n("sdgsgs"),m;<BR> str a(n);<BR> m=n;<BR> m.show();<BR> a.show();<BR>}<BR><BR><BR><BR> <BR><BR><BR><BR><BR><BR><BR>
<br><a href="javascript:history.go(-1)">返回上页</a><br><a href=http://www.copathway.com/cndevforum/>访问论坛</a></p>
<hr size=1>
<blockquote><p>
<font color=red>答案被接受</font><br>回复者:香格里拉 回复日期:2002-09-21 13:08:01
<br>内容:str & str::operator = (const str &s)<BR>{<BR> if(this==&s)<BR> return *this;<BR> <BR> delete [] name;//此处有问题,因为构造函数并未new过name<BR> name=new char[strlen(s.name)+1];<BR> strcpy(name,s.name);<BR> return *this;<BR>}<BR><BR>方法一、修改你的构造函数,new一个name出来<BR>str(){};<BR>改为<BR>str(){name=new char[];};<BR><BR>方法二、将operator =()中的 <BR>delete [] name;<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-21 13:43:14
<br>内容:我明白了,谢谢你,不过我还有一个问题想请教你,就是在<BR>str(){name=new char[];};里没有指定name的大小,会不会有些不妥?<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>
回复者:植物人 回复日期:2002-09-22 17:29:54
<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-23 09:06:22
<br>内容:我都在vc上编译通过的,str(){name=new char[];};的确有些危险,你用这样初始化后做其他操作,如读出字符等就有危险,你的程序中,只是delete一下,所以没有问题。<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 + -