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

散分,来拿把

编辑:说三道四文库 发布时间:2017-01-21 06:46
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可以发现这个错误。

说了一大堆,还是没有说清。搞清楚了发个消息给我,学习学习,谢了。
谢谢
接分了
谢谢
版主呢
谢谢~~~
楼主,该解贴了吧^_^
谢谢了!
祝你成功!!
控制Form不能放大、缩小、移动、关闭-Delphi资料 控制系统菜单-Delphi资料 利用Delphi实现支持窗体的自定义函数 轻轻松松在DELPHI3.0中实现三态按钮 全部窗体可使用鼠标移动-Delphi资料 让按钮连续工作--兼谈Delphi元件开发 让彩色光标出现在Delphi程序中 让彩色光标出现在程序中-Delphi资料 在Windows桌面的任务栏上有一个凹陷的区域,其中显示着系统时钟以及一些图标,这个长方形的区域便 如何使用Show方法来显示一个模态窗口-Delphi资料 如何旋转字体-Delphi资料 如何隐藏和显示Windows的任务条-Delphi资料 如何在DELPHI界面上运行可执行文件 设计Form时的快捷键-Delphi资料 生成非矩形窗口-Delphi资料 时隐时现的鼠标-Delphi资料 无标题窗口的移动-Delphi资料 应用程序敏感键的实现-Delphi资料 用Delphi 4.0 设 计 新 型 界 面 用Delphi 实 现 自定 义 颜 色 对 话 框 及 其 构 件 用Delphi 实现自定义颜色对话框及其构件 用Delphi4实现风Word97风格的工具栏 用Delphi 开 发windows 屏 幕 保 护 预 览 程 序 用Delphi设置墙纸 用DELPHI实现无边界窗体的移动 用Delphi实现自定义颜色对话框及其构件 用DEPHI 3.0实现动画ABOUT窗口-Delphi资料 用鼠标拖动无标题窗口-Delphi资料 在Delphi编程中创建一个启动闪现窗口 在form中想用enter来代替tab,请问如何实现?-Delphi资料 在Listboxes中加背景图-Delphi资料 收购C、C++、JAVA版完整工程源序 VC中如何实现等待5微秒? 关于如何用代码描述rc文件, 那位用过触摸屏的,给个建议, 请问微秒级的延迟在C语言中如何实现? 请问为什么在COM中总是使用双重值针,即指针的指针? 用过,销售,触摸屏的兄弟姐妹给个建议 关于C里面的setjmp()和longjmp()函数的使用。 一个用VB偏的“图片批量转换软件”!带源代码!!! 多伦多穷人欢庆申奥失败 有人注意到了吗???directX的资源释放不干净! 谁能帮我做一个小型帐务管理(用C)??? 用delphi编程,用什么触摸屏比较好啊? 怎样在程序运行时增加子菜单(要增加的数目是未知的) 关于Sprite动画 出售代码 ACCESS的FORMS DLL调用函数问题 VB在ACCESS中应用的一个小问题! ACCESS中的FORMS问题? 再普通不过的一个问题 delphi6中还有BDE和ADO吗?它们被淘汰了吗?现在还有必要用它们来学数据库的开发吗? 50分答谢!!!---这个css定义为什么会出现这样的效果??? 各位:怎么判断表里某个字段是否存在? 纯技术问题:精通“书签“与“层“的大虾请进!!!! 一个奇怪的现象,请教高手这是怎么回事? 哪里有破解清华五行卫士密码的软件? vc++7.0好用吗? 吃完晚饭了... 可不可以让 CppWebBrowser1的背景不是白色? 热热热!!!热疯了!!! 我的喇叭哪儿去了? 我的PB程序出了问题了!!! sql server中哪个函数是用于字符串与整型之间转换的? 我想限定文本输入框只能输入10个汉字或20个英文字符,但文件输入框却只能输入10个英文字符,如何解决? 当我将这样的字符串“dsdsdsdfsdffsdsdfsdfsfdsdfsdfsfsfdsdffs.....”放入我的表格中时,无论怎样设置也不折行,影响了部局,如何解决? MFC中视图(view)是怎样随着主窗口的大小改变而改变的。 急!请教!!猫猫连接,用数据管道同时访问两库,访问不到对方的网络库(sybase) 关于电影下载 我已经把一个exe文件加入到我自己的程序中了,请问在我的程序中应该样调用该exe文件呢? 哪位高手知道RTF格式的含义?或者更好,知道Rxlib中的RXRICHEDIT控件中识别RTF格式的方法? Delphi编写的DLL在VC下不能使用 请问哪儿有电工的<>的电子版下载?我只有这么多了 msdn2001年4月版的讨论 请问哪儿有电工的<>的电子版下载? 请教高手!!!! 请进 各位:周末愉快!为何我的多表查询用updatebatch提交时总是报错? 我不明白!!!! 请问,BAS 与 VBJ 有什么区别吗?为何他们安装在同一个目录呢? 如何得到系统进程的列表? vi下如何撤销操作? 15的素因数是什么:有几个?是【素】因数。 判断:36和48的公因数有2、3、4、6、12,其中最大公因数是12. 科学题 (20 21:0:21)          把5毫升质量分数为98%的浓硫酸(密度为1.84克/厘米3).加入到25毫升水里进行稀释,求所得溶液的溶质质量分数. 45和15是因数和倍数的有哪些 24.36.48 公因数 (26 15:54:30)一艘船在河中逆流而上,河水流速为3米/秒,经过一座桥时,船上的一只木箱掉落水中,5分钟后船员才发现,立即掉头追赶,同时将航速(船相对与静水的速度)提高到原来的1.5倍,则可在 请问72和48公因数有多少? 96和80的公因数有哪些 (26 15:39:30)甲、乙两物体都做匀速直线运动,速度之比是4:3,所用时间之比是5:2,则路程之比为 72的公因数是,90的公因数是,最大公因数是,最小公因数是 160的公因数 初二科学题(关于水的浮力的) (7 15:53:16)武汉号满载时重7.5*10^7N,求满载时军舰排开海水的体积. (  ρ海水=1.03*10^3kg/m^3  g=10N/kg      结果保留两位小数) 108和144的最小公因数 120和56的公因数是多少? 初二 物理 初二科学 请详细解答,谢谢! (5 15:45:30)铝球的体积为400立方厘米,质量为810克,问,该球是实心的还是空心的?(铝的密度:2.7×103千克/立方米) 用短除法求下面各组数的最大公因数和最小公因数4和6 18和20 72和96 81和108 77和160有没有公因数 科学 (24 20:53:14)下列几种用电器正常工作时,电流最大的是(  )A.42寸液晶电视机   B.MP3       C.电子手表            D.100瓦 93和108的公因数(这个因数的倍数不能有96、99、102、105)108的的因数(这个因数的倍数不能有93、96、99、102、105) 80和30 公因数 桌子上放着一个空烧杯,烧杯内有——A氮气 B氧气 C空气 D包括ABC 8和10的公因数 75和60 所有公因数的和 科学 (24 21:49:28)下列几种用电器正常工作时,电流最大的是(  )A.42寸液晶电视机   B.MP3       C.电子手表            D.100瓦 8和24的公因数是什么 90和60的公因数有哪些 科学 (24 16:22:14)T℃时,氯化钠的溶解度是n克,将m克氯化钠投入到n克水中,充分搅拌,若得到不饱和溶液,则溶液的溶质质量分数为(   ).如果m克氯化钠不能完全溶解在n克水中,则溶液的溶 8和5的公因数 16和25的公因数 某同学质量为60㎏,每只脚与地面的接触面积150cm²,当他站在水平地面上时,对地面的压强多大?若他想使自己对地面的压强增大一倍,他可以怎样做? 8和32的公因数 45,75和60的公因数 初中物理压强计算题初中物理的压强计算题 46和13 公因数 24和54的公因数有哪些 几道初中物理计算题 压强1.动物保护组织成员测量出野牛在水平沙地上站立时留下的一个脚印的面积为0.025立方米,深度为1.8CM,并对该沙地进行抗压实验发现使沙地达到相同深度的压强为2x10x10 14和46的最小公因数 30和35的公因数有哪些 一位体重为50千克的中学生每只脚与地面的接触面积为200平方厘米,那么他双脚站在水平面上,对地面的压强是多少? 1-99的公因数是什么?可加我好友我现场问一下 科学 (26 19:5:8)一位同学用天平和量筒测定不规则木块的密度,已知木头的密度小于水的密度.请写出所需实验器材和实验步骤,并写出木块密度表达式.  一道初中物理压强计算题把一个长方体平放、侧放、立放在水平桌面上,物块对水平桌面的压强分别是0.8×1000Pa、2×1000Pa、5×1000Pa,已知ρ物=2000kg/立方米,计算这个物块的体积(g取10牛/千克) 公因数是什么意思? 1、将干燥纯净的氯酸钾13.25KG与3.25KGMNO2混合后装入大试管知趣氧气,反应一段时间后得到11.7固体物质.(1)制的的氧气质量是多少?(2)反应后固体物质是什么?质量是多少?(1)4.8KG  (2) 求初二物理关于固体压强的两道试题及解答.要有详细的过程哦.谢谢大家咯.我需要的是计算题和过程。不是填空之类的哦。 625和560有没有公因数?(1除外!)(要最大的) 科学家用_、_及_来描述与研究运动. 初二物理光现象试题和答案.过程.最好有实验 光现象的 285和175有没有公因数?(1除外!)(要最大的) 科学题 (23 21:41:24)1.水晶是晶体吗?2.晶体一般具有______、________,而非晶体一般不具有这些特性.3.无水硫酸铜粉末是____色的,遇水后形成的硫酸铜晶体是____色的,把其溶解在水中形成的硫酸铜溶 人站在水平地面上时,保持静止,受到__力和____力的作用,这两个力的施力物体分别是_____和 _____.这两个力的关系是__________.悬挂在楼板下的电灯,受到地球对它的_____和电线对它的_____作用,这两 498和415有没有公因数(1除外) 科学 (23 16:47:21)一辆长30m的大型平板车,整两车匀速通过70m长的桥,所用的时间是10s,它以同样的速度通过另一座桥,花了20s时间.那么,另一座桥长多少? 〈声现象〉声音的特性和 噪音的危害和控制 285和175有没有公因数?(1除外!) 科学 (23 21:28:35)有一铝球,体积是60cm2,质量是108g,判断该球是空心还是实心?如果该球是空心,那么球内的中空部分的体积是多大?如果在中空部分铸满铁,那么这个球的质量为多少?(铝的密度:2.7 求一套初二物理期末试题 一定要有答案啊,两套最好了.直接复制到下面,急 ,这套题不太好,还有没有啊 30和45的因数有多少. 1和3有没有公因数求快 生活中遇到的科学问题 (21 21:17:30)春节前几天家里的墙壁都很潮湿,这是为什么?那卫生么有有些地方不这样呢?
备案号:鲁ICP备13029499号-2 说三道四 www.s3d4.cn