Description
补充完成类numCal的定义
(注意:所有运算符的重载都必须符合运算符原本的语义,比如++A是“先加后使用”) class numCal { public: numCal(int a[], int size); //构造函数,size是数组a的长度 numCal(const numCal& other) //拷贝构造函数 ~numCal(); //析构函数,要完成释放内存的操作 int sum(); //求动态数组arr中size个元素值和 numCal& operator=(const numCal& other) //=运算符重载 numCal& operator++(); //前序++运算符重载,使得++A后,A.arr的每个元素值加1(A为numCal类的对象) numCal operator++(int); //后序++运算符重载,使得A++后,A.arr的每个元素值加1(A为numCal类的对象) //add any other function or property needed here private: int size; //数组arr元素个数 int *arr; //动态数组 }; 调用示例: int main() { int a[3] = {1, 3, 5}; numCal n1(a, 3); cout << n1.sum() << endl; numCal n2(n1); cout << n2.sum() << endl; int b[4]={2, 4, 6, 8}; numCal n3(b,4); n2=n3; cout << (n2++).sum() << endl; cout << n2.sum() << endl; cout << (++n2).sum() << endl; cout << n2.sum() << endl; n2 = n2; return 0; } 输出结果: 9 9 20 24 28 28 注意:你只需要提交类定义。 Problem Source: 12级期末机考题 |
一发WA:(*@ο@*) 作大死,一小时了还是WA;
#include<iostream>
using namespace std;
class numCal {
public:
numCal(int a[], int size){ //构造函数,size是数组a的长度
arr = a;
/*for (int i = 0; i < size; i++){
arr[i] = a[i];
}*/
this->size = size;
}
numCal(const numCal& other){ //拷贝构造函数
this->arr = other.arr;
this->size = other.size;
}
~numCal(){//析构函数,要完成释放内存的操作
}
int sum(){ //求动态数组arr中size个元素值和
int sum = 0;
for (int i = 0; i<size; i++){
sum += arr[i];
}
return sum;
}
numCal& operator=(const numCal& other){ //=运算符重载
size = other.size;
arr = other.arr;
return *this;
}
numCal& operator++(){ //前序++运算符重载,使得++A后,A.arr的每个元素值加1(A为numCal类的对象)
for (int i = 0; i<size; i++){
arr[i]+=1;
}
return *this;
}
numCal operator++(int ize){//后序++运算符重载,使得A++后,A.arr的每个元素值加1(A为numCal类的对象)
numCal temp(*this);
for (int i = 0; i<size; i++){
++arr[i];
}
cout << (*this).sum() << endl;
return temp;
}
//add any other function or property needed here
private:
int size; //数组arr元素个数
int *arr; //动态数组
};
int main(){
int a[3] = { 1, 3, 5 };
numCal n1(a, 3);
cout << n1.sum() << endl;
numCal n2(n1);
cout << n2.sum() << endl;
int b[4] = { 2, 4, 6, 8 };
numCal n3(b, 4);
n2 = n3;
cout << (n2++).sum() << endl;
cout << (n2).sum() << endl;
cout << (++n2).sum() << endl;
cout << n2.sum() << endl;
n2 = n2;
system("pause");
return 0;
}
最终AC:构造函数出现问题
#include<iostream>
using namespace std;
class numCal {
public:
numCal(int a[], int size1)
{
int*list = new int;
this->size = size1;
for (int i = 0; i < size1; i++)
{
list[i] = a[i];
}
arr = list;
}
numCal(const numCal& other)
{
this->size = other.size;
int* list = new int;
for (int i = 0; i < size; i++)
{
list[i] = other.arr[i];
}
this->arr = list;
}
~numCal(){//析构函数,要完成释放内存的操作
}
int sum(){ //求动态数组arr中size个元素值和
int sum = 0;
for (int i = 0; i<size; i++){
sum += arr[i];
}
return sum;
}
numCal& operator=(const numCal& other){ //=运算符重载
size = other.size;
arr = other.arr;
return *this;
}
numCal& operator++(){ //前序++运算符重载,使得++A后,A.arr的每个元素值加1(A为numCal类的对象)
for (int i = 0; i<size; i++){
arr[i] += 1;
}
return *this;
}
numCal operator++(int ize){//后序++运算符重载,使得A++后,A.arr的每个元素值加1(A为numCal类的对象)
numCal temp(*this);
for (int i = 0; i<size; i++){
++arr[i];
}
return temp;
}
//add any other function or property needed here
private:
int size; //数组arr元素个数
int *arr; //动态数组
};
conclusion:=_=醉了,做了4个多小时才ac所有的题目。。还百度了很多问题,期末要挂的感觉。开始撸期末理论试题