📄 subject_38895.htm
字号:
<p>
序号:38895 发表者:IEEE 发表日期:2003-05-06 21:08:44
<br>主题:C++问题
<br>内容:#include "iostream.h"<BR>#include "string.h"<BR>class A<BR>{<BR>public:<BR> virtual ~A() {cout<<"A::~A() called!\n";}<BR>};<BR><BR>class B:public A<BR>{<BR>public:<BR> B(int i) {buf=new char[i];}<BR> ~B() {delete []buf; cout<<"B::~B() called!\n";}<BR>private:<BR> char *buf;<BR>};<BR><BR>void fun (A *a) { delete a; }<BR><BR>void main()<BR>{<BR> A *a=new B(15);<BR> //B b(19);<BR> //a=&b;<BR> fun(a);<BR>}<BR>该程序运行时,析构函数的调用实现了多态性,编译通过,运行正常。<BR>但是将其中的两条注释掉的语句加入main()之后,编译通过,但运行时出了问题!<BR> 请指点。
<br><a href="javascript:history.go(-1)">返回上页</a><br><a href=http://www.copathway.com/cndevforum/>访问论坛</a></p>
<hr size=1>
<blockquote><p>
回复者:Justin Le 回复日期:2003-05-06 21:53:53
<br>内容://可以运行,没明白你的意思<BR>#include "iostream.h"<BR>#include "string.h"<BR>#include <stdio.h><BR>class A<BR>{<BR>public:<BR> virtual ~A() {cout<<"A::~A() called!\n";}<BR>};<BR><BR>class B:public A<BR>{<BR>public:<BR> B(int i) {printf("in B %d\n",i);buf=new char[i];}<BR> ~B() {delete []buf; cout<<"B::~B() called!\n";}<BR>private:<BR> char *buf;<BR>};<BR><BR>void fun (A *a) { delete a; }<BR><BR>void main()<BR>{<BR> A *a=new B(15);<BR> B b(19);<BR> <BR> a=&b;<BR> fun(a);<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>
<font color=red>答案被接受</font><br>回复者:ArthurTu 回复日期:2003-05-06 23:04:05
<br>内容:A *a=new B(15);<BR> B b(19);<BR> <BR> a=&b;<BR>fun(a);<BR>pointer a开始指向new出来的一个B的实例,然后有把他指向另外一个B的实例(还不是new出来的)!然后又在fun里面delete不是new出来的这个实例!<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>
回复者:IEEE 回复日期:2003-05-10 10:00:13
<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 + -