今天做“运算符重载”时在类内定义了析构函数,结果执行时发现控制台什么都没输出。删掉析构函数则可以正常运行。
代码如下:
#include
using namespace std;
class Time{
private:
int mintue;
int second;
public:
Time(){mintue=0;second=0;};
Time(int m,int s);
friend Time operator+(Time&,Time&);
~Time(){delete(this);};
int getMintue(){return this->mintue;};
int getSecond(){return this->second;};
};
Time::Time(int m,int s){
mintue=m;
second=s;
}
Time operator+(Time & t1,Time & t2){
Time t;
t.mintue=t1.mintue+t2.mintue;
t.second=t1.second+t2.second;
if(t.second>=60){
t.second-=60;
t.mintue++;
}
return t;
}
int main(){
Time t,t_1(2,45),t_2(7,15);
t=t_1+t_2;
cout<<"(mintue:second)->"<getMintue()<<":"<getSecond()<return 0;
}
运行结果为空,什么都没有输出,也没有报错
我认为导致这个结果的原因可能是** 这个析构函数把我类中函数内定义的对象给销毁了,导致传了一个空参返回输出**
有没有能创建析构函数后正常运行的修改意见呢?还是说在这种需要调用到类内部函数有对象的类是不能使用含有“delete”的析构函数呢?或者其他可能?
希望能得到大家的指点 QWQ
~Time(){delete(this);};
这根本错误
析构函数里delete你自己new的对象即可,不要去delete别的东西。
http://t.csdn.cn/ePATS
delete(this)在析构函数内会形成死循环
编程基础第六版 课后题
代码如下
#include <stdio.h>
#include <math.h>
int main()
{
int i,j,t;
int a[15];
int x,l,h,mid,n;
n=15;
l=0;
h=n-1;
printf("请输入15个不同数字,按一次输入一个,依次输入15次的方法输入数字:\n");
for(i=0;i<15;i++)
scanf("%d",&a[i]);
for(j=0;j<14;j++)
{
for(i=0;i<14-j;i++) //这里我第一次写也忽略了j要不断的去替换i,所以对于i来说它的循环条件应该是14-j,有好多人可能和我一样写成i<15啦
if( a[i]<a[i+1])
{
t=a[i];
a[i]=a[i+1];
a[i+1]=t;
}
}
printf("按从大到小的排序结果:");
for( i=0;i<15;i++)
printf("%d\t",a[i]);
printf("\n");
for (l=0, h=14, printf("请输入一个数:"), scanf("%d", &x); l<=h;)//while也可以但是我很奇怪用while会提前退出循环哈哈哈
{
mid=(l+h)%2;
if (x>a[mid])h=mid-1;
else if (x<a[mid])l=mid+1;
else
{
printf("%d是第%d位数",x,mid+1);
break;
}
}
if(x!=a[mid])
printf("查无此数!");
return 0;
}