【发布时间】:2018-07-05 07:56:16
【问题描述】:
我正在学习 C++ 中的构造函数和析构函数;帮助我抓住我的错误,即使它们很愚蠢......
这里是我编写的使用 C++ 中的类执行加法的代码;这将创建 datatype num 的两个求和,并使用构造函数 sum() 来执行两个数字的求和;然而,当一切顺利时,我偶然发现为 num 创建了一个复制构造函数,(虽然不是必需的,但仍然可以练习)......如果没有类 sum 的动态对象,就不可能无论如何运行代码(不删除复制构造函数)...帮助我改进我的代码和我在下面代码中的错误; 我也想知道如何在这个程序中使用复制构造函数;问题是在析构函数中,删除操作在同一块内存上执行了多次(我想)
这是我的代码
#include<iostream>
#include<new>
using namespace std;
class num
{
public:
int *a;
num(int x)
{
try
{
a=new int;
}
catch(bad_alloc xa)
{
cout<<"1";
exit(1);
}
*a=x;
}
num(){ }
num(const num &ob)
{
try
{
a=new int;
}
catch(bad_alloc xa)
{
cout<<"1''";
exit(2);
}
*a=*(ob.a);
}
~num()
{
cout<<"Destruct!!!";
delete a;
}
};
class sum:public num
{
public:
int add;
sum(num n1,num n2)
{
add=*(n1.a)+*(n2.a);
}
int getsum()
{
return add;
}
};
int main()
{
num x=58;
num y=82;
sum *s=new sum(x,y);
cout<<s->getsum();
delete s;
return 0;
}
【问题讨论】:
-
对于代码审查,您可以考虑前往CodeReview Stackexchange
-
num(){ }这是非常错误的。你不能让你的指针数据成员未初始化。 -
为什么
sum需要继承num?sum(num n1,num n2)更喜欢由const num&代替。sum(const num& n1, const num& n2) -
我认为
num不需要持有int *,而不仅仅是int。或者让它存在。只需在ints 上操作
标签: c++ class constructor destructor custom-data-type