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

散分,来拿把

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

说了一大堆,还是没有说清。搞清楚了发个消息给我,学习学习,谢了。
谢谢
接分了
谢谢
版主呢
谢谢~~~
楼主,该解贴了吧^_^
谢谢了!
祝你成功!!
兰亭集势:被高估的“长尾式采购” 谁说WP手机不行?微软称已成拉丁美洲第二大移动平台 Windows 8之父Steven Sinofsky加盟风投机构A16Z SDCC 2013演讲议题抢先看 腾讯、阿里、支付宝、网易…… [开源推荐]Google开源基于Deep Learning的word2vec工具 【开源专访】DWZ团队:致力打造最简单的Web前端开发方式 Linux黑客车库创业:服务器操作系统CoreOS颠覆互联网 时间序列数据处理的角逐:MongoDB vs. Cassandra 移动周报:Sphinx游戏引擎的前世今生 联想K900评测:英特尔X86兼容性明显提升(组图) 小米手机-HAXLR8on硬件黑客马拉松:32小时的创客狂欢 鲍尔默宣布下台后,微软应该做好这几件事情 IGT张奇伟:从空间物理到博彩游戏研发 Bing即将推出新功能 用户可直接在搜索结果页购买商品 【开源专访】郑晔谈Moco框架的前世今生以及Java编程之道 CTO俱乐部第108期下午茶:电商在微信上的现状与未来 SDCC 2013讲师议题确定 门票即将售罄(图) 简化工作流程,10款必备的HTML5开发工具 六大领域考评鲍尔默微软掌舵能力,只一“C”尔? 剥离自雅虎的Hortonworks:低调发展,三年融资近1亿美元 Google的中国梦如何死于傲慢与不得力公关 [回顾]昨日黄花,那些被人们遗忘的11个操作系统 管理企业级API的7个最佳实践 Java 与 .NET 的平台发展之争 英特尔正在开发3D深度感知摄像头 可读出人类的情绪等 从数据平台到运营平台:国产开源移动统计Cobub Razor发布0.6版本 八月网络事故频现,CN域名遭最大规模网络攻击 Google云平台或将成为Amazon最大竞争对手 Camera360宣布完成1800万美元B轮融资 利用ZK Ajax框架 高效扩展Web App Web开发者需养成的8个好习惯 HelloImpl err: Cannot connect to ORB 是怎么回事呢? Source Insight3.1使用问题?正确解答者150分 哪儿有《The art of computer programming》下载? C++編程思想 各位情场高人,帮小弟一把,怎么把这个MM约出来,出个主意,俺先谢谢大家了!!! 我需要JAVA-JDBC打开数据库的例子.................... 谁有Delphi编译错误信息对照表,有中文注解的最好---50分 请问在SQLSERVER2000中如何在检索数据是将两个字段合并成一个字段,用“||”吗? 数据库的重定向问题! 关于使用资源 QRRichText 打印如果页数很多(2页以上),就打印不完全,但打印预览中可以看到全部,为什么? 我有一个弱弱问题要问。。。 在C#中如何做ToolWindow属性的WinForms?????????? 怎样才能将静态文本框的背景色设置为透明的? 实时错误“480”,不能创建AUTOREDRAW图象,如何解决?把PICTUREBOX定义太大会产生这个错误,不能绘图! COOL!COOL! 序列的一系列问题 劳烦各位介绍一下业界最流行实用的汇编,C语言编译器,我是在校生急需指导! Rebar 移动的问题!烦死我了! 高手留步:请问VC中获取当天日期的函数是???还有比较两个日期所差天数用什么函数??? 请问怎样才能将vb中的date型的内容转化为sql server的datetime型呀,谢谢大家了 请问,怎样在 FLAH5 中直接插入 MP3,并改变 MP3 的音质? 利用delphi连接远程sybase数据库,在多用户操作情况下为什么会产生数据库死锁 看了一下SL275(2001年5月)的课程概述,发现里面没有了Applet了,SCJP是不是舍弃了它了? 有关JAVA的Package,ClassPath的讨论,诸位看过来 COOL!COOL!COOL! what's wrong with the SOCKET define? 使用vb通过NotesSQL for odbc连接过domino数据库时总出现如下错误“ [Microsoft][ODBC 驱动程序管理器] 驱动程序的 SQLAllocHandle on SQL_HANDLE_ENV 失败”,有谁遇到过吗?如何解决? 在SDK中,如何判断对话框中的CheckBox是否选中? 请教如何修改如何提交数据(一对多的表) 如何在delphi里实现文件(比如文本文件)从一台机器传递到另一台机器?比较急! 不知道主板集成声卡的型号,又没有驱动程序?怎么办?主板是ASUS CUSL2,I815E CHIPSET 想问问大家pb自带的例子中有没有关于权限的例子 怎么样吧jpg图片转成ico?????? 听说程序员结婚生孩子多数会是女孩,是不是真的?,好像与辐射有关哦 那里有windoes版的ftp源码 不知道主板集成声卡的型号,又没有驱动程序?怎么办? 主板是ASUS CUSL2 ,I815E CHIPSET 请问哪里有编写多线程安全对象的资料?(72分) 通过界面输入大量数据,界面如何设计??? 在Red hat 7.1如何安装GBK字符集! Focus(老鱼)回答得50分 请教网站的建设计划如何写呀? 请问下面的DELPHI程序如何转为CB 帮忙测试! 怎样得到硬盘序列号 关于Web开发…… Notes Client 待办事宜的定时刷新问题 都是面向对象,怎么C++和JAVA对此代码的结果不同?欢迎高手讨论! 关于//{{AFX_??? 的问题 ---> 如何动态建立字符数组? 都是面向对象,怎么JAVA和C++对此代码结果不同?欢迎高手讨论! 已知x+y=3,xy=1,a+b=5,ab=3,且m=ax+by,n=bx+ay 求m^3+n^3的值 根号-a的3次方除以a.a小于0.怎么化简. 等待他,突然累了.英文怎么写? 已知x+y=5,xy=2.a+b=3,ab=3,m=ax+by,n=ay+bx,求n/m+m/n的值 英语急转弯1.What kinf of mouse doesn't eat rice?( ) 已知方程组2x+5y{2x+y=-2① ax-by=-4和方程组{3x-y=12①,bx+ay=-8的解相同,求(2a+b^2013的值 2进制如何转化为10进制,请用一个简单明了的办法说明下,本人很愚笨,一般的理解不了, 急转弯 英语怎么说 英语翻译1.Without you how do I fly?You are my wings.Without you how do I happy?you are my heaven.2.My heart is a secret,waiting for you to understand the secret这2句话,别给我用其他的翻译工具翻译,我要人为的翻译.我都用过 2进制转10进制 11012进制1101 转10进制 一个英语急转弯,Two teachers teach at the same school.One is the mother of the other's son.what relation are they to each other 已知方程组2X+5y=-6 ax-by=-4和方程组3X-5Y=16 BX=AY=-8 的解相同已知方程组2X+5y=-6ax-by=-4和方程组3X-5Y=16BX=AY=-8的解相同求(2a+b)2007的值 若I3a+b+5l+l2a-2b-2l=0则2a的平方-3b=多少如果方程组x+Y+2ax-y=4a的解 2进制11111111转10进制 如果A=2除以根号5-根号2,B=3除以根号5+根号2,求(2A分之一)的2002次方乘以(B分之一)的2003次方的直 我害怕你打我 翻译成英文 最新的英语六级高频词汇和词组(发给我一份吧, a²-2a+1分之a²-1除以a的三次方-a²分之a+1,其中a=根号3 已知关于x、y的方程组2x+5y=-6和ax-by=-4和方程组3x-5y=16和bx=ay=-8的解相同,求(2a+b求(2a+b)的2010次方的值。 十进制转二进制的公式 ax-bx-ay+by 已知方程组2X+5y=-6,ax-by=-4和方程组3x-5y=16,bx+ay=-8的解相同,求(a+b)的平方的值 二进制与十进制转换公式? 十进制数127转换为十六进制数是多少 高中生英语词汇书 诗词 散文书求适合高中生看的英语词汇书,还有好点儿的语法书.同求诗词书籍,和散文集.最好是宋词多的书,像纳兰和李煜、辛弃疾那样的.谢谢谢O(∩_∩)O谢谢 2进制转10进制最简便方法?(公式) (log4(3)+log8(3))*(log3(2)+log8(2))-log1/2(^4√32)=?.. 若log3^5 log5^7 log7^x=log4^2 log6^4 log8^6,求x=? 10进制转16进制公式,这种结果对吗三、十进制数十六进制 如:76521转为十六进制 16|76521 4726 ――5 第一位(个位) 295 ――6 第二位 18 ――6 第三位 1 ―― 2 第四位 最后得1276516 二进制与十六 计算(log4 3+ log8 3)(log3 2+ log9 2)-- log1/2 32^(1/3)+5^(log259) log2为底3*log3为底4*log4为底5log5底6*log6底7*log7底8= (ax+by)^2+(bx-ay)^2 log3 4×log4 8×log8 a=log根号3 9,则a= 已知关于x,y的方程组{ax+by=3,bx+ay=7}的解是{x=2,y=1,则a+b的值是: 几道英语脑经急转弯1.When will a net hold water?2.What letter is a question?3.How can you make a repe shorter without cating or winding out it?4.who works only one day in a year but never gets find?并且翻译出来问题的意思.我一定 (log4 3+log8 3)(log3 2+log9 2)-log1/2 32^1/3+5^(log25 9) 十进制数57转换成无符号二进制整数 英语脑经急转弯ben is very hungry.there is canned fish and canned chicken in the fridge.what does he open first? 英文翻译:我害怕一个人晚上外出怎么说? 俞敏洪《高中英语词汇精选》中的单词都是高中课本上的单词吗?背这本书和背刘毅3000哪个好 问几道英语脑经急转弯!1.where can you always find mony when you look for it?2.how many sides does a cicle have ?3.where does the egg floating on the Mississippi River come from?4.why is the letter G and letter S in "gloves‘ close to each 你知道我一直是一个害怕孤单的孩子 英文翻译 无符号二进制整数怎么转换成十进制数 英语脑经急转弯?有急用?1.where were you when lights went out?A.go to bed B.at the cinea C.in the sun D.in the dak2.what is the biggest in the world?A.the earth B.eyelid C.the sun D.the star3.what is easy to get into but hard to get out of?A. 若a,b,x,y均为正实数,且x+y=1,求证:ab≤(ax+by)(ay+bx)≤(a+b)^2/4 无符号二进制整数1111001转换成十进制数是多少 十进制小数怎么转换为二进制小数要方法和0.5的例子!记住,是0.如果行, 将十六进制数321转换为对应的十进制数等于 十进制数50转换成无符号二进制整数 十进制小数如何转换为二进制十进制小数,如:0.325,如何转换为二进制,请写清详细过程和最后答案. 想提高英语词汇量,有什么推荐的词汇书吗? 设p=1/log2(11)+1/log3(11)+1/log4(11)+1/log5(11),则 A.0<p<1 B.1<p<2 C.2<p<3 D.3<p<4请问具体解法?ps:2,3,4,5都是底数,11是真数 比较根号2+根号7与根号3加根号五的大小 如何将带有小数的二进制数转换成十进制数,如0.011101?望各位大哥赐教,写出换算过程. 14的10进制转为2的跟8的进制 英语谜语,可能是脑经急转弯how many feet are there in a yard 十进制的小数怎么转换成二进制 设P=1/log2^11(底数为2的意思)+1/log3^11+1/log4^11+1/log5^11求p的取值范围A0 这是10进制转几进制的?6bb8121b3db2771a65daeacb29342c429ec1d948dc1841b1340d239b4b04d41a复原成十进制是什么? 十进制小数转换二进制的问题22.8125转二进制 “因为你,我很害怕”用英文怎么翻译?
备案号:鲁ICP备13029499号-2 说三道四 www.s3d4.cn