输入一个整数,调用拷贝构造函数生成一个新对象,新对象的值是原来对象的3倍。
计算并输出这两个对象的和,差,乘积。得到的结果一直与样例不正确
#include<iostream>
using namespace std;
class integer{
private:
int x;
public:
integer(int x);
integer(const integer&op);
int get();
integer add(integer op);
integer jian(integer op);
integer c(integer op);
integer divide(integer op);
};
integer::integer(int x){
this->x=x;
}
integer::integer(const integer&op){
this->x=3*op.x;
}
int integer::get(){
return x;
}
integer integer::add(integer op){
int p=x+op.get();
return integer(p);
}
integer integer::jian(integer op){
return x-op.get();
}
integer integer::c(integer op){
return x*op.get();
}
integer integer::divide(integer op){
return x/op.get();
}
int main(){
int x;
cin>>x;
integer a(x);
integer b(a);
cout<<a.add(b).get()<<endl;
cout<<a.jian(b).get()<<endl;
cout<<a.c(b).get()<<endl;
}
该回答引用GPTᴼᴾᴱᴺᴬᴵ
在这个程序中,您的拷贝构造函数并没有按照题目要求生成一个新对象的值是原来对象的3倍,而是直接将原来对象的值乘以了3。因此,在进行加、减、乘、除运算时得到的结果可能不是您所期望的。
您需要修改拷贝构造函数以满足题目要求。可以尝试修改为以下代码:
integer::integer(const integer&op){
this->x=3*op.x;
}
同时,在jian、c、divide函数中,需要创建一个新的对象来保存运算结果,而不是直接返回一个整型数值。修改后的代码如下:
integer integer::jian(integer op){
int p=x-op.get();
return integer(p);
}
integer integer::c(integer op){
int p=x*op.get();
return integer(p);
}
integer integer::divide(integer op){
int p=x/op.get();
return integer(p);
}
修改后的程序应该可以得到正确的输出结果。
仔细调试下,看看你每一步的输出是什么