c++深拷贝案例&运算符重载

//输入:
//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 <string.h>
#include <iostream>

using namespace std;

class MyArray {
	int size;
	int* ptr;
	friend ostream& operator<<(ostream& os, MyArray& m);
public:
	MyArray() {
		this->size = 6;
		this->ptr = new int[6];
	}
	MyArray(int a): size(a) {
		this->ptr = new int[this->size];
	}
	MyArray(const MyArray& m):size(m.size) {
		ptr = new int[size];
		memcpy(ptr, m.ptr, size*sizeof(int));
	}
	int getSize() {
		return size;
	}
	int& operator[](int i) {
		return ptr[i];
	}
	MyArray operator+ (MyArray & m) {
		MyArray ma(size);
		for (int i = 0; i < this->size; i++) {
			ma.ptr[i] = ptr[i] + m.ptr[i];
		}
		return ma;
	}
	MyArray operator+ (int& m) {
		MyArray ma(size);
		for (int i = 0; i < this->size; i++) {
			ma.ptr[i] = ptr[i] + m;
		}
		return ma;
	}
	MyArray operator- (MyArray& m) {
		MyArray ma(size);
		for (int i = 0; i < this->size; i++) {
			ma.ptr[i] = ptr[i] - m.ptr[i];
		}
		return ma;
	}
	int operator*(MyArray& m) {
		int n = 0;
		for (int i = 0; i < this->size; i++) {
			n += (ptr[i]*m.ptr[i]);
		}
		return n;
	}
};

ostream& operator<<(ostream& os, MyArray& m) {
	for (int i = 0; i < m.size; i++) {
		os << m.ptr[i];
		if (i != m.size - 1) {
			os << ",";
		}
	}
	os << endl;
	return os;
}

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;
}

  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值