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

散分,来拿把

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

说了一大堆,还是没有说清。搞清楚了发个消息给我,学习学习,谢了。
谢谢
接分了
谢谢
版主呢
谢谢~~~
楼主,该解贴了吧^_^
谢谢了!
祝你成功!!
OpenFeint绝迹后,开源项目OpenKit继续前进 美FDA通过搜索引擎和社交平台预警药品副作用 挖坟三星“眼球追踪技术”背后的技术团队 为什么开发者热衷在Stack Overflow上查阅API文档? Facebook推新News Feed 欲造就“个性化报纸” 女神程序员的一天:暴力测试social爬虫代码 2013IBM云存储路线图:更快,更简单,更安全 二战大数据故事:数学家、物理学家、概率论击败德国潜艇 软件定义网络服务商Pertino B轮融资2000万 Scringo社交组件,让你的应用“热闹”起来! Android开发必备:Eclipse 4.2 SR2版本发布 32场!2013年360HTML5校园行首站告捷 移动周报:不做内容,只钻技术的快播 一周消息树:中国开源发展缓慢的“病因” 百度应用引擎BAE正式开放 新增支持Node.js CloudVelocity,下一个VMware? Buffer创始人谈开发:先验证,后编程! 谷歌可穿戴式产品再度来袭:会说话的鞋子 未来Chrome OS或取得Android般成功 云落地@北京,北京市北斗公共平台或开放API? GitHub再遭攻击 主要服务中断约一小时 移动开发者将有望拥有.app域名使用权 微信将推“游戏中心”?移动互联网入口圈地加剧 美国航空公司首次开放API 并举办“黑客马拉松”编程大赛 谷歌数据中心设计的10条“黄金法则” GitHub时代:为什么我们都在开源 VMware发布Horizon Suite 三款应用打包折扣低 TOP30+应用排行榜:二月份国内外综合榜单 开源是否意味着不需要负任何责任? 微软年度科技展 酷炫技术知多少 图解Hadoop生态系统 做过进销存系统的高手们,请谈谈经验 asp 与 dreamweaver有联系吗? 请教如何设置WIN2000的时间服务? 怎么样判别时间字段为空 ? 如何实现类适于IE浏览器的图片旋转功能 如何在FileListBox中弹出系统对该文件的右键菜单 如何更改MFC程序生成文件的默认图标? 我是ASP初学者,请大家帮忙? 英语真的那么重要吗? 一个JS的简单问题,但是我还是给100分 怎么透明显示一张bmp图片(急,在线等待) 急,两个问题,帮帮忙(其中一个关于ActiveSkin) 查询出的报表内字段值为空的单元格,显示不出单元格框线,为什么? Java论坛 急!在LINUX下,配置内核时Intel corporation|82801AB AC'的声卡应该先哪项,我用的是2.4.16的内核。 世界杯——蓝色的忧郁 使用异步socket通信,服务器端在OnReceive消息函数中能否获得客户端IP地址? 菜鸟学JAVA送分 怎样用delphi实现EDI? 两到汇编题。麻烦大家帮我做一下。。我实在做不出来 今天去面世了~~~结果他们………… 举报 哪里有.net源程序下载?? : 两到汇编题。麻烦大家帮我做一下。。我实在做不出来 莱鸟问题:如何字符变量str的值赋给EDIT控件, : 两到汇编题。麻烦大家帮我做一下。。我实在做不出来 哪里有2001年的中程的试卷? 第一次来CSDN,以后希望大家多多帮助!! 在VB中获取和修改计算机名字 用什么软件能把扫描仪扫的文章变位文本文档?? 终止线程出错! VB中远程数据库的访问 如何实现使textbox中只能输入带两位小数的内容?即保证其中内容为*.XX(*代表任意数字串),凡不合要求的输入都被过滤? 如何在IIS的DefaultWEB Site的属性的HTTP Header中加入新的File type?? 怎样读jpeg的头文件,用C语言,谢了 为什么我远程连接sql server总不成功呢?我已经把1433端口开了啊 西游记 如何判断一个大整数是素数,如何找出整数的模逆 多层数据库开发源码大公开---不可多得! WinZip等的右键菜单Add to xxx.zip是怎么实现的? 帮帮忙,急! 因写程序丢过头发的请进. 怎样使lable的内容分两行显示 一个使我困惑的小问题,敬请关注(***100分***)!! 帮帮忙好吗? 二个关于字符串中对子串的替换与删除的问题? 怎样实现虚构造函数? 请问各位高手,手机图片和手机铃声是什么格式的?在电脑上能不能打开?应该怎么制作? 请大家帮个忙,有个小问题,如何用showmessage输出括号内的内容('%K%')?在线等待 A simple problem!? 列出中国近代史上学生的爱国运动有哪些 小利问小王:“你们家共有几口人呢?”小王答:“我家人数的3/4再加上3/4个人,就等于我家的人数.”小王家有( )人. 我国人口有1182005000人,这个数读作(),改写成以万作单位的数是().请问()里面还带单位吗 如何战胜幸福的两大天敌? 食堂买来2/3吨面粉,如果明天吃1/9吨,可以吃( )天? 双黄蛋孵出来的小鸡是什么样的? 开心部落各宠物对应的天敌是什么 小利问小王:“你们家共有几口人?”小王答道:“我家的人数的3/4再加上3/4个人,就等于我家的人数.”小王 第五次全国人口普查统计全国人口约为1236260000这个数读作,改写成以亿作单位的数约是()亿 生物人有没有天敌 怎么克服呢 设直线kx+(k+1)y-1=0(k是正整数)与坐标围成的三角形面积为Sk,则S1+S2+S3……S2013的值是? 全国第五次人口普查统计结果显示,我国总人数已达到1295330000人,读作()人改写成“亿人”作单位,并保留两位小数越是()亿人. 田地里打败了天敌.123456 She's going to the cinema( )Sunday evening填on或in,并说明原因. 全国第六次人口普查数据显示,我国现有1370536875人,横线上的数读作(),改写成以万为单位的数是()改写成以亿为单位的数,保留两位 小数是() what would you like,tea or coffee?和which would you like,tea or coffee?的区别 每个生物都有天敌 那病毒有没有天敌 鱼干里面的虫子对人体有什么危害 一个正方形桌面边长为80厘米,给它配一个同样长的玻璃,求玻璃面积 I'm going to the party___(hold)at Simith's home this evening if i am free.为什么要用to be held? she is going to the cinema( )Sunday evening. A.on B./ C.in 在农业生产上过多施用化肥,不会出现的结果是化肥被雨水冲到湖泊或池塘中引起藻类等大量繁殖化肥大量进入湖泊池塘引起水中缺氧大量鱼虾死亡过多的化肥造成土壤板结,农作物正常生长 why do you like it?给个英文回答 已知直线y=kx+k-1和直线y=(k+1)x+k(k是正整数)及x轴围成的三角形面积为Sk,则S1+S2+...+S2006的值是多少? 一张长方形的办公桌,桌面长14分米、宽7分米要配上同样大小的玻璃,这块玻璃的面积是多少? -Are you going to the party_at Smith's home this evening?-I will if I am freeA、holding B、held C、to hold D、to be held 答案是D为什么啊 这是什么昆虫,对人体有害吗? 不施用化肥的设想有哪些 why do you like it?中文意思是什么sssssssssss 2.设直线L1:y=kx+k-1和直线L2:y=(k+1)x+k (k为正整数)及 x轴围成的三角形面积为Sk,2.设直线L1:y=kx+k-1和直线L2:y=(k+1)x+k(k为正整数)及 x轴围成的三角形面积为Sk,求S1+S2+S3+…….+S2011的值. 鸡蛋怎样孵化成小鸡 there is a big party at mr.smith's home on saturday evening .一份完形填空!急用! 设直线y=kx+k-1和直线y=(k+1)+k(k是正整数)及x轴围成的三角形面积为Sk,则S1+S2+S3+.+S2006的值是? 女孩子几岁上一年级 Do you like it?why ? 意思‘‘ 鸟蛋颜色大小不一,但结构都一样我想知道鸟蛋是怎样孵出小鸡的?为什么不属于科学问题.课堂上我们一般会根据情景及生活经验,提出明确而科学的问题. 现在的孩子几岁上一年级更合适? Are you going to the party to be held at Smith's home 为什么用to be held 一个鸡蛋有可以孵出两个小鸡的吗. 一般小孩子几岁上一年级准确一点 Why do you like it? 食堂运来一批面粉,每天吃20份之1吨,12天后还剩这批面粉的3份之2.运来的面粉有多少吨? Which would you rather______,Tea or coffee?A./B.drinkwould rather能直接跟名词吗?搞不懂B怎么错了 Why do you like it best?怎么回答? 想问一下这是什么昆虫,对人体有害吗? 有一张方桌,桌面的边长是8分米,要配上一块与桌面同样大的玻璃,这块玻璃的面积是多少平方分米. 爱国人物的故事 一定要简短的,我要在3分钟演讲的!50~100字 请问下这是什么昆虫?对人体有害么 Do you and your sister look different?N0---------------------的回答 爱国的人物 事迹 小孩几岁上一年级比较好我儿子2005年9月23日出生,声母、韵母都学完了,而且10以内的分成都学完了,11+15之类的计算能求. ---Do you and your sister look the same?(做否定回答)《初一题目》 ---NO,()().我们老师说是填they don‘t.我感觉有点不对劲, 找个爱国主义人物或事例!简短一些!不要太长! 小孩子几岁上一年级比较好 You and your sister look the same.改为一般疑问句做否定回答 AB两地相距7200米,甲、乙分别从AB两地同时出发,结果在距B地2400米处相遇,如果乙的速度提高到原来的3倍,那么两人可提前10分钟相遇,则甲的速度是每分钟行多少? 大家都知道,鸡蛋可以孵小鸡,但,双黄蛋可以吗,它能孵几只小鸡呢?有特殊情况吗?那有谁知道金刚葫芦娃,小矮人们,仙女们都是七个.这是为什么? ( )35.Which do you like ________ ,tea or coffee?A.well B.good C.better D.best为什么是C? 两地相距360km.客车和货车同时从两地相对开出,4.5小时相遇,客和货速度的比是5:3,货车每小时行多少米? 双黄蛋可以孵出小鸡吗?为什么
备案号:鲁ICP备13029499号-2 说三道四 www.s3d4.cn 说三道四技术文摘