嗷嗷冰红茶� 2021-06-01 18:06 采纳率: 100%
浏览 73
已采纳

编程题,做了很久都还是不知道怎么做

定义一个MyArray类,内部有私有成员int sizeint *ptr

 

创建该类对象时,在构造函数中用new动态内存分配一个长度为size的一维整型数组并用ptr成员存储该数组的首地址。析构函数要释放动态数组。

 

为该类重载以下运算符:

 

(1)下标运算符[ ],利用该下标运算符实现对数组元素的读写访问

 

(2)赋值运算符,实现MyArray对象之间正确的深层赋值。

 

(3)+运算符,实现两个MyArray对象的数组的对应元素相加,返回一个新的MyArray对象,该对象的数组中存储了之前两个数组对应元素相加的结果。

 

(4)-运算符,实现两个MyArray对象的数组的对应元素相减,返回一个新的MyArray对象,该对象的数组中存储了之前两个数组对应元素相减的结果。

 

(5)*运算符,将两个MyArray对象的数组视作向量,该运算符用于求向量内积

 

(6)<<运算符,实现使用cout输出对象的数组的内容

 

此外,该类的复制构造函数要正确实现深层复制。

 

main函数已经写好,请根据main函数的内容完成该类的设计:

 

int main(){

int n;

cin>>n;

MyArray arr1(n);

for(int i=0;i<arr1.getSize();i++)

cin>>arr1[i];

cout<<arr1;

MyArray arr2(arr1);

for(int i=0;i<arr2.getSize();i++)

arr2[i]+=1;

cout<<arr2;

MyArray arr3,arr4;

arr3=arr2+arr1;

cout<<arr3;

arr4=arr2-arr1;

cout<<arr4;

cout<<arr1*arr2<<endl;

return 0;

}

 

输入描述先输入变量n,创建一个MyArray对象,其对应的数组有n个元素

然后输入数组的n个元素的值

输出描述根据样例输出

提示你需要提交除了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

允许最长运行时间1000ms

允许使用最大内存64KB

  • 写回答

3条回答 默认 最新

  • weixin_51376699 2021-06-07 16:58
    关注

    #include<iostream>
    using namespace std;
    class MyArray
    {
    private:
        int size;
        int *ptr;
    public:
        MyArray(int n=0){
            size=n;
            ptr =new int[size];
        }

        ~MyArray(){
            delete []ptr;
        }

        MyArray(const MyArray &arr){
            size=arr.size;
            ptr =new int[size];
            for(int i=0;i<size;i++)
                ptr[i]=arr.ptr[i];
        }


        int getSize(){return size;}

        int &operator[](int n){return ptr[n];}

        const int &operator[](int n)const{return ptr[n];}

        MyArray &operator=(const MyArray& arr)
        {
            if(&arr!=this)
            {
                if(size!=arr.size)
                {
                    delete [] ptr;
                    size=arr.size;
                    ptr =new int[size];
                }
                for(int i=0;i<size;i++)
                    ptr[i]=arr.ptr[i];
            }
            return *this;
        }


        friend ostream& operator<<(ostream& os,const MyArray& arr);

        friend MyArray operator+(const MyArray& arr1, const  MyArray& arr2);
        friend MyArray operator-(const MyArray& arr1, const  MyArray& arr2);
        friend int operator*(const MyArray& arr1, const  MyArray& arr2);
    };
        ostream &operator<<(ostream& os,const MyArray& arr)
        {
            for(int i=0;i<arr.size;i++)
            {
                os<<arr.ptr[i];
                if(i<arr.size-1)
                    os<<",";
            }
            os<<endl;
            return os;
        }

        MyArray operator+(const MyArray& arr1, const  MyArray& arr2)
        {
            MyArray arr(arr1.size);
            for(int i=0;i<arr1.size;i++)
                arr.ptr[i]=arr1.ptr[i]+arr2.ptr[i];
            return arr;
        }
        MyArray operator-(const MyArray& arr1, const  MyArray& arr2)
        {
            MyArray arr(arr1.size);
            for(int i=0;i<arr1.size;i++)
                arr.ptr[i]=arr1.ptr[i]-arr2.ptr[i];
            return arr;
        }
        int operator*(const MyArray& arr1, const  MyArray& arr2)
        {
            int s=0;
            for(int i=0;i<arr1.size;i++)
                s=arr1.ptr[i]*arr2.ptr[i]+s;
            return s;
        }

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(2条)

报告相同问题?

悬赏问题

  • ¥15 安卓13,动态广播无法接受
  • ¥50 docker运行容器端口如何映射(不重启服务、不重建容器)
  • ¥50 基于TwinCAT3实现力传感器的实时读取
  • ¥20 python求解八元一次不定方程,无数解中随机输出几组即可(相关搜索:用python)
  • ¥50 libreoffice导出PPTX到PDF中的错误换行问题
  • ¥15 python实现网页视频下载
  • ¥15 如何通过深度图获得物体的完整、正确点云?
  • ¥15 有没有操作系统适用白丁的经典的书籍,如何解决?(标签-学习)
  • ¥15 Catia V5 R20 64位 安装过程中选择orbix配置创建套接字失败
  • ¥100 C51单片机设计交通灯时出现的问题