说三道四技术文摘-感悟人生的经典句子
说三道四 > 文档快照

散分,来拿把

编辑:说三道四文库 发布时间:2017-06-25 03:15
HTML文档下载 WORD文档下载 PDF文档下载
#include"iostream.h"
#include"string.h"
  
 class  person
{
protected:
char *name;
public:
person(char*k);
person(const person& k);
~person();
static int num;
};
int person::num=0;
person::person(char*k)
{
num++;
  name=new char[strlen(k)+1];
  strcpy(name,k);
}
person::person(const person &k)
{
num++;
name=new char[strlen(k.name)+1];
strcpy(name,k.name);
}
person::~person()
{
num--;
delete [] name;

 
void main()
{
  cout<<person::num<<endl;
person john("john");
cout<<person::num<<endl;
person yang(john);
cout<<person::num<<endl;
person k("k");
k=john; //这里出错,难道只有重载=才能搞定吗?有没有别的办法?
 

}
关注
重载运算符
你说的这里出错是什么错呢?
虽然你没重载=操作符,但编译器有啊。这个赋值操作没错,但是会有潜在的错误隐患,即使多个指针同时指向同一内存块。记住,数据成员中有指针,构造函数中也用了new分配了一块内存,地址赋给这个指针的话,那么必须显式的给出拷贝构造函数、西够函数、重载赋值操作赋。析够函数应该包含有delete的语句。这些均为能进行正确的拷贝既深拷贝。
好像是拷贝构造函数的问题
不是k=john这句话错了,是在析构k的时候发生错误。
所以只要你写了k=john这句话,编译器就肯定要调用Operator=().
在“=“时调用默认的构造函数,name没有释放原空间,又分配空间,造成错误,解决的办法可以增加一个判定条件,如if(name!=NULL)(事先要初始化name=NULL)释放原空间,在进行重新分配空间。
to dfh716(突袭): 
"在“=“时调用默认的构造函数" ,这句有点问题。要调用也是调用(默认)拷贝构造函数,但这是指在初始化的时候。对于这个程序,调用的是默认的=操作符。
来拿分了
只管接分,别的就不管了。
我接
谢楼主
:)
晕,我重载可以,我也是怎么做的,但是有没有好的办法?
编译器可以为类自动生成copy constructor

但是只有在类创建时才会调用,一般(没有多态,成员变量没有显式copy constructor等)会导致一个bitcopy操作产生。

所以你必须重载operator=

而且你这段程序也有问题,会导致内存泄漏,因为在你operator=

之后,应当delete name;
要重载运算符。
要重载运算符。拿分
……
拿分
up
guanzhu
:D
:():
乐乐,你来找我要分吗?
哈哈
楼上的朋友解释的很清楚了。
收到,接分
收分,谢谢了.
当然要重载operator=了
coming 
拿分
只有重载!
成员变量中有指针时,一定要注意该问题!
谢谢
up
3x
ok
拿分
谢谢!
谢谢
接分了
ok
Thanks.
?????
ganggangkaishi???
关注ing!
up
我c++学得不好,应该重载operator=吧
楼主langzi8818 (涂春银) ,你怎么把程序删了?帮你贴一下:

#include"iostream.h"
#include"string.h"
  
 class  person
{
protected:
char *name;
public:
person(char*k);
person(const person& k);
~person();
static int num;
};
int person::num=0;
person::person(char*k)
{
num++;
  name=new char[strlen(k)+1];
  strcpy(name,k);
}
person::person(const person &k)
{
num++;
name=new char[strlen(k.name)+1];
strcpy(name,k.name);
}
person::~person()
{
num--;
delete [] name;

 
void main()
{
  cout<<person::num<<endl;
person john("john");
cout<<person::num<<endl;
person yang(john);
cout<<person::num<<endl;
person k("k");
k=john; //这里出错,难道只有重载=才能搞定吗?有没有别的办法?
 

}

在BC31下编译能过,运行有时会有问题(一开始出现“Null pointer assignment"报错,后来改了一通,改不回来了就重新把原来你的程序拷回去运行却没有错误了:),所以说“有时”),总之是有问题了。

k=john;这句赋值是不会错的,问题出在析构的时候。查了一下钱能C++教材,在14.6节讲浅拷贝和深拷贝的地方的例子ch14_3.cpp,应该和你这个有点像,但是你是有自定义拷贝构造函数的。他例子的目的就是要说明自定义拷贝构造函数的必要。不知你有没有试过,去掉自定义拷贝构造函数,而用默认的就能通过了,不知道默认的是怎么做的。

我跟踪了一下,发现做到k=john;时并没有去调用自定义拷贝构造函数,可能问题就是出在这里了,深拷贝变成了浅拷贝,析构时遇到NULL指针,报错。但有时却不报错,也奇怪。

到VC6里试了一下,编译连接能过,运行后在console里显示了0 1 2后弹出一个Debug错误“Debug Assertion Failed!”还有一些相关信息。VC可以发现这个错误。

说了一大堆,还是没有说清。搞清楚了发个消息给我,学习学习,谢了。
谢谢
接分了
谢谢
版主呢
谢谢~~~
楼主,该解贴了吧^_^
谢谢了!
祝你成功!!
在Delphi的DBGrid中插入其他可视组件 在Delphi的Socket编程中如何从服务器向指定的客户机发送信息? 在Delphi动态生成定义数据库 在Delphi中处理数据库日期型字段的显示与输入 在Delphi中简单实现多重查询 在Delphi中建立和使用别名 在DELPHI中使用ADO对象存取ODBC数据库 在Delphi中使用DBF数据 在Delphi中随意控制DBGrid 每一行的颜色 在Delphi中自动检测、建立数据库别名和表格 在存储过程中使用use database-Delphi资料 在一个Dbgrid中显示多数据库-Delphi资料 在运行期创建表-Delphi资料 怎样把可以使用的表名输出到一个选择框?-Delphi资料 怎样发布基于Microsoft SQL Server的程序-Delphi资料 怎样解决打开一个DBF表时的Index not found..错误-Delphi资料 怎样向SQL Server插入带有Image字段的记录-Delphi资料 怎样在Paradox表中加密码?-Delphi资料 自动Login数据库-Delphi资料 自动检测、建立数据库别名和表格-Delphi资料 自动注册Paradox-Delphi资料 Delphi 4增訂的Object Pascal Delphi 5 Enterprise版10大特点 Delphi 插件创建、调试与使用应用程序扩展 Delphi 程序制作要点 Delphi 中面向对象编程之我见 Delphi”程序级触发器”功能的实现 Delphi4.0系统提示信息的汉化 Delphi5优化 Delphi编程技巧十则 Delphi程序制作要点 紧急求助:VC.NET怎么导入资源文件。(高分) 如何连接.dbf的数据库(dBase). 下拉菜单问题 请问如果一个控件没有hwnd,怎样才能拿到它的hwnd?急! 简单问题 请问如果一个控件没有hwnd,怎样才能拿到它的hwnd?急! 请问如果一个控件没有hwnd,怎样才能拿到它的hwnd?急! 在设计ActiveX控件时,怎么得到该控件的HWND 请问浮点型的数据如何设置使它以科学计数法表示? 高分求教:VPOP3的使用方法? 500分求解:windows编程。 请教高手,关于用TCP/IP检测网络状态 一个关于注册 ODBC 的问题,请教高手 控件得到焦点时有OnActive事件,那失去焦点时是什么事件 哎,不知做什么软件才能赚钱? 请教跨域访问的问题! 请高手帮忙!一定给分! 怎样编程实现在ListBox里显示数据库表中一个列?(绝对放分) 那位有《101规约》给我一份,我实在不知道该到哪里去找!!!(50分求助) 关于对话框制作 关于例外 给Cisco认证提点建议!给分===== [求教]XML文档的参数中如有&符号如何处理。 [求教]XML文档的参数中如有&符号如何处理。 谁能给我提供免费防刷新的计数器代码……在线等待 请问出现下列错误,如何解决!(怎样察看每个OLE DB状态值) 会话状态设置中的SQLServer 模式如何应用? BUG!版主管理里的专题管理 session 没设置正确,请蝈蝈看看 有朋友问我学习C语言初中学历能学会吗? 大家帮个忙,很简单的问题,快呀,关于数据库的问题 请问vb怎么打开Access2000的数据库? 计算机并行口原理是什么 我在前台的程序中对text1.text=rs!number,为何text1.text的值还是空值,想不通??? GetSafeHdc() 的含义及用法 一个调用SQL数据库的问题! 如何ML一个装载地址不是4M的EXE文件(比如6M或8M) 谁能说说从一个ListView拖动文件到另一个ListView中 如何在程序结束时播放一段动画再结束!!!!! 我要书 下面是我的存储过程,为什么多人操作的时候会发生死锁呢,急呀! 谁知道炖鸡怎么炖啊?加什么料? 如何使鼠标点到对话框外时关闭对话框?(方法越多越好) 国家安全部门使用什么操作系统? “用户级虚拟机”调试应用程序的有几种实现方式,谁能说说???? 如何优化程序,使他减小占用系统资源? 请问怎样同时显示简体和繁体汉字? 我想查找字段为'注册类型'中包含'公司'的所以有记录 帮帮忙,SQL Script Recovery如何获得注册码? 如何“引用结构中的结构的数据”,比如MSG中的POINT鼠标结构 用一个Query动态生成并执行SQL语句 哪里可以下载到有关oracle 9i的电子书? they came running over翻译,为什么come 后是running People don't feel like doing simple jobs over and over again改同一句People ( ) ( ) ( ) do simple jobs over and over again中间有4个空应该是People ( ) ( ) ( ) ( ) do simple jobs over and over again 谁知道take your time的意思?不能以字面意思做回答! they come to us over and _____ again.A.on B out C.above D.over选哪个?为什么?意思是? ax2+bx+c=0(其中a\b\c均为常数,且满足b2-4ac>0),写出两实的表达式 这次的希望英语大赛有没有笔试?2009年的,快, If you love to go back,we again 英语翻译真不好意思,那么晚才回你邮件,最近我换了一个新的工作,是做环球期货的,我非常喜欢这份工作,在那里我学到了很多东西,果然做自己喜欢做的事情,是不会觉得累的,哈哈!我女朋友比 C语言中,a,b,c,d为double类型,数学表达式为5ab/7cd,在电脑中表达式5/7*a/c*b/d为什么是错的 方程2x+y=3的正整数解是 I Came .I came again.翻译是什么 中国的电器在美国如何使用 鸦片战争以来,中国社会各阶级分别提出了哪些建国方案?结局怎样?从中可得到哪些历 英语翻译还有这个句子:"if God choose,Ishall but love thee better after death. 当太阳升起等我回来接你 什么歌 1. 鸦片战争以来,中国社会各阶级分别提出了哪些建国方案?结局怎样?从中可得到哪些 表达式“989”>“99”的值为False,这道题为什么不对? 歌词:火红的太阳升起在金色的西藏...是什么歌名?歌词:火红的太阳升起在金色的西藏唉藏族人民纵情歌唱.世界屋脊汽笛入云天万里高原凯歌传四方...这是上世纪70年代唱的歌,不记得歌名 40.鸦片战争以来,中国社会各阶级分别提出了哪些建国方案?结局怎样?从中可得到哪些 "989" > "99"表达式值为F嘛?为什么下面表达式的值是False的有( )."989" > "99" Instr ("Visual basic","b")>0 "2000 >1997 " "3" > "2" 你去哪里了 用英文怎么说 大家推荐英语四级历年真题详解吧.最好有2010年12月的试题,王长喜的好吗?有用过的吗?王长喜点评历年真题 16版第二次修订 还是17版二次修订好? 大约8点15分 英文 知道长方体的三条棱长,求对角线长的公式是什么 王长喜英语四级真题包含2011年12月的题什么时候出版 谁告诉我时间用英语怎么表达?比如,八点十五或者什么的,有没有什么规律! 长方体的三条棱长分别为1、3、5,则它的对角线为? 1912年当时中国都有哪些报刊? think over(翻译成中文) “你们去吗”用英文怎么说? 现在中国最有名的报纸是什么? But think it over and guess again .是什么意思 长方体的棱长总和怎么算1.长方体有{6}个面,每个面都是{长方}形,也可能有两个相对的面是{正方}形,{ }的面积相等.有{12}条棱,{ }的棱的长度相等.2.一个长方体的长是1.宽是1.2 英语翻译 请问这篇作文有没有语法错误? 当a取何整数值时,关于x的方程2分之1ax-3分之5=2分之1(x-3分之4)的解是正整数?明天我就来收,希望能有人解答的出来,如果不明白题意的可以用百度HI我,注意: dark lady watch over you!帮忙翻译下 小琳用计算器求三个正整数a,b,c的表达式(a+b)/c的值.她依次按了a,+,b,÷,c,=,得到数值11.而当她依次按b,+,a,÷,c,=时,惊讶地发现得到数值是14.这时她才明白计算器是先做除法再做加法的,于是她依次 阮籍咏怀八十二首的风格特征 Madeleine Peyroux--To Love You All Over Again 歌词翻译歌词: A quiet room is what you get, an empty glass, an unmade bed,A picture window with a view, and all I think about is youTo feel so bad, to feel so good, to let it be misunderstood,Now 这篇短文有没有语法错误How are you doing?My uncle Li Ming will leave for your citiy to attend a meeting.He will bring the Chinese picuture that you want to have for you.The picutre is very beautiful and I think you must like it.I hope you c ALLEY BAR怎么样 You are free to come over and visit again 最好再讲一下come over 的用法 改同义句:She gave some bread to me .She( ) ( ) ( ) ( ). 后巷酒吧THE ALLEY怎么样 翻译I suggest that you tear up the letter and start over again. 哪位高手帮忙用C++做一个求复杂表达式的计算器~RT,要满足下列要求,不胜感激啊~(1) 数值:包括整数和实数,数值可带正、负号.(2) 一般运算符:正号、负号、加、减、乘、除、求模和乘方,其 take your 什么情景可以用? Money用them还是用it这样一道题:He has no _____ ,please ______?A.moneys; give him it B.moneys; give it to him C.money;give them to him D.money;give him them.应该选几呢? 连词成句:she to and mother them some Jack's Peter give then gave forgot birthday but cakes 英语翻译“The Alley Alley O”该怎么翻译?是不是国外的一个地名或者特指什么?原文出处:YeahThe big ship sails through the Alley Alley OThe Alley Alley OThe Alley Alley OThe big ship sails through the Alley Alley OOn the la If kids are given some money a week or a month,it will do them good,because they will learn how to use money. But Lana has other suggestions:Help them plan. “If there’sa big-ticket itemyour child wants,” says Lana,“help him plan how long 翻译句子:亲爱的妈妈,我爱你,我今天真的错了,请原谅我 take your time中文意思 We will raise some money for them,t_______.It can help many children go b_____ to school. people don't feel like doing simple jobs over and over again 我要参加一个英语演讲,要求一分钟自我介绍,一分钟才艺表演,请问我一分钟才艺表演表演什么?大家帮我出出主意!我明天就要我去的!哪位好心的高明大师帮我想一下? 英语翻译The co-SPI membranes with smaller IEC values displayed much lower WUsand the dimensional changes in thickness direction were significantlydecreased,though the expansion in plane direction didnot change too much or even became stronger.The Tom doesn't feel like doing such simple jobs over again.怎样改同义句 Take Your Time Fast ForwardLucky StarStayMyBaby能和这几首差不多好听的就行 这几首是Amy Diamond唱的
备案号:鲁ICP备13029499号-2 说三道四 www.s3d4.cn 说三道四技术文摘