c++MyArray类(动态数组为int)的运算符重载+,-,*,[]

定义一个MyArray类,内部有私有成员int sizeint *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;
	}

  • 0
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
什么是多态性?请举例说明。多态性有什么好处? 不同的对象收到同一消息可产生完全不同的动作,这一现象叫做多态。通俗 地说,多态性是指用一个名字定义不同的函数,这些函数执行不同但又似 的操作,即用同样的接口访问功能不同的函数,从而实现“一个接口,多种 方法”。 多态性有以下的好处: 提高了处理问题的抽象级别; 降低了程序设计时的复杂性;(程序员只需记住一个接口,而不是好几个。) 8_2 在C++语言中实现了哪几种多态性?请说明通过什么方式实现。 在C++语言中实现了编译时多态性和运行时多态性。 编译时多态性通过函数重载,运算符重载和模板实现。模板实现的多态性又称为参数多态性。 在C++语言中运行时的多态是通过继承和虚函数实现的。 8_4 什么是静态联编?什么是动态联编? 一个源程序需要经过编译、连接,才能成为可执行代码。 上述过程中需要将一个函数调用链接上相应的函数代码,这一过程称为联编。 联编的目的是要建立函数调用与函数体之间的联系,即将一个函数调用连接到一函数的入口 地址。 静态联编:在程序被编译时进行联编;(早联编)特点是程序执行快,但灵活性较小。 动态联编:在程序运行时联编。(晚联编,滞后联编)其特点是灵活性高,程序执行慢。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值