定义一个MyArray类,内部有私有成员int size和int *ptr。
创建该类对象时,在构造函数中用
new动态内存分配一个长度为
size的一维整型数组并用
ptr成员存储该数组的首地址。析构函数要释放动态数组。
为该类重载以下运算符:
(1)下标运算符[ ],利用该下标运算符实现对数组元素的读写访问
(2)赋值运算符,实现MyArray对象之间正确的深层赋值。
(3)+运算符,实现两个MyArray对象的数组的对应元素相加,返回一个新的MyArray对象,该对象的数组中存储了之前两个数组对应元素相加的结果。
(4)-运算符,实现两个MyArray对象的数组的对应元素相减,返回一个新的MyArray对象,该对象的数组中存储了之前两个数组对应元素相减的结果。
(5)*运算符,将两个MyArray对象的数组视作向量,该运算符用于求向量内积
(6)<<运算符,实现使用cout输出对象的数组的内容
此外,该类的复制构造函数要正确实现深层复制。
main函数已经写好,请根据main函数的内容完成该类的设计:
输入:
5
1 2 3 4 5
输出:
1,2,3,4,5
2,3,4,5,6
3,5,7,9,11
1,1,1,1,1
70
参考代码如下:
#include<bits/stdc++.h>
using namespace std;
class MyArray{
int size;
int *ptr;
public:
MyArray(){
ptr=NULL;
size=0;
}
MyArray(int n):size(n){
ptr=new int[size];
size=n;
}
MyArray(MyArray&npt){
ptr=NULL;
size=npt.size;
ptr=new int[size];
for(int i=0;i<size;i++){
ptr[i]=npt.ptr[i];
}
}
int getSize(){return size;}
~MyArray(){delete[]ptr;size=0;}
int& operator[](int i){
return ptr[i];
}
friend MyArray& operator+(MyArray& m2,MyArray& m3){
MyArray* p=new MyArray();//建立对象指针
p->ptr=new int[m3.size];
p->size=m3.size;
for(int i=0;i<m3.size;i++){
p->ptr[i]=m2.ptr[i]+m3.ptr[i];
}
return *p;//不一定只有*this
}
friend MyArray& operator-(MyArray & m2,MyArray&m3){
MyArray* p=new MyArray();//建立对象指针
p->ptr=new int[m3.size];
p->size=m3.size;
for(int i=0;i<m3.size;i++){
p->ptr[i]=m2.ptr[i]-m3.ptr[i];
}
return *p;//不一定只有*this
}
friend int operator*(MyArray&m1,MyArray&m2){//必须要加上friend
int ans=0;
for(int i=0;i<m1.size;i++){
ans+=m1.ptr[i]*m2.ptr[i];
}
return ans;//返回乘法和
}
friend ostream& operator<<(ostream&out,MyArray& c);
};
ostream& operator<<(ostream& out, MyArray& c){
for(int i=0;i<c.size;i++){
out<<c.ptr[i];
if(i!=(c.size-1)){
cout<<",";
}
}
cout<<endl;
return out;
}