程序设计二(面向对象)_实训9_复杂类的实现_Array类的实现


第1关:构造函数的实现

#include <iostream>
#include "Array.h"
using namespace std;
Array::Array() { size = 0; }
Array::Array(const Array& rhs) {
	size = rhs.size;
	for (int i = 0; i < size; i++) {
		data[i] = rhs.data[i];
	} 
}
Array::Array(int const a[], int n) {
	size = n;
	for (int i = 0; i < size; i++) {
		data[i] = a[i];
	} 
}
Array::Array(int count, int value) {
    int i;
    size = count;
    for (i = 0; i < count; i++) {
        data[i] = value;
    }
}

第2关:成员函数的实现

#include <iostream>
#include "Array.h"
using namespace std;
Array::Array() { size = 0; }
Array::Array(const Array& rhs) {
	size = rhs.size;
	for (int i = 0; i < size; i++) {
		data[i] = rhs.data[i];
	} 
}
Array::Array(int const a[], int n) {
	size = n;
	for (int i = 0; i < size; i++) {
		data[i] = a[i];
	} 
}
Array::Array(int count, int value) {
    int i;
    size = count;
    for (i = 0; i < count; i++) {
        data[i] = value;
    }
}

void Array::disp()const {
	for (int i = 0; i < size; i++)
		cout << data[i] << " ";
    cout << endl;
}
void Array::insert(int pos,int value) {
	int k;
	for (k = size - 1; k >= pos; k--)
		data[k+1] = data[k];
	data[pos] = value;
	size++;
}
void Array::remove(int pos) {
	int k;
	for (k = pos + 1; k < size; k++)
		data[k-1] = data[k];
	size--;
}
int Array::at(int pos)const {
	return data[pos];
}
void Array::modify(int pos, int newValue) {
	data[pos] = newValue;
}

第3关:利用异常做参数有效性检查

/***begin***/
/***begin***/
#include <iostream>
#include "Array.h"
#include <stdexcept>
using std::invalid_argument;
using std::overflow_error;
using namespace std;
Array::Array() { size = 0; }
Array::Array(const Array& rhs) {
	size = rhs.size;
	for (int i = 0; i < size; i++) {
		data[i] = rhs.data[i];
	} 
}
Array::Array(int const a[], int n){
	if (n < 0)
		throw std::invalid_argument("Array");	
	size = n;
	for (int i = 0; i < size; i++) {
		data[i] = a[i];
	} 
}
Array::Array(int count, int value) {
    if (count < 0) 
		throw std::invalid_argument("Array");
	int i;
    size = count;
    for (i = 0; i < count; i++) {
        data[i] = value;
    }
}

void Array::disp()const {
	for (int i = 0; i < size; i++)
		cout << data[i] << " ";
    cout << endl;
}
void Array::insert(int pos,int value) {
	if (pos > size - 1 || pos < 0)
		throw std::invalid_argument("insert");
	if ((size + 1) >SIZE)
		throw std::overflow_error("insert");
	int k;
	for (k = size - 1; k >= pos; k--)
		data[k+1] = data[k];
	data[pos] = value;
	size++;
}
void Array::remove(int pos) {
	if (pos < 0 || pos >= size)
		throw std::invalid_argument("remove");
	int k;
	for (k = pos + 1; k < size; k++)
		data[k-1] = data[k];
	size--;
}
int Array::at(int pos)const {
	if (pos >= size || pos < 0)
		throw std::invalid_argument("at");
	return data[pos];
}
void Array::modify(int pos, int newValue) {
	if (pos < 0 || pos >= size)
		throw std::invalid_argument("modify");
	data[pos] = newValue;
}


/***end***/ 


/***end***/ 

第4关:运算符重载

#include <iostream>
#include "Array.h"
#include <stdio.h>
using namespace std;
Array::Array() { size = 0; }
Array::Array(const Array& rhs) {
	size = rhs.size;
	for (int i = 0; i < size; i++) {
		data[i] = rhs.data[i];
	} 
}
Array::Array(int const a[], int n) {
	size = n;
	for (int i = 0; i < size; i++) {
		data[i] = a[i];
	} 
}
Array::Array(int count, int value) {
    int i;
    size = count;
    for (i = 0; i < count; i++) {
        data[i] = value;
    }
}

void Array::disp()const {
	for (int i = 0; i < size; i++)
		cout << data[i] << " ";
	cout << endl;
}
void Array::insert(int pos,int value) {
	int k;
	for (k = size - 1; k >= pos; k--)
		data[k+1] = data[k];
	data[pos] = value;
	size++;
}
void Array::remove(int pos) {
	int k;
	for (k = pos + 1; k < size; k++)
		data[k-1] = data[k];
	size--;
}
int Array::at(int pos)const {
	return data[pos];
}
void Array::modify(int pos, int newValue) {
	data[pos] = newValue;
}
Array& Array::operator = (const Array&rhs) {
	size = rhs.size;
	for (int i = 0; i < size; i++) {
		data[i] = rhs.data[i];
	}
	return *this;
}
const int& Array::operator [] (int pos)const {
	return *(data+pos);
}
int& Array::operator [] (int pos) {
	return *(data+pos);
}
bool operator < (const Array&lhs,const Array&rhs) {
	int a = lhs.getSize();
	int b = rhs.getSize(); 
	if (a < b) {
		int i = 0;
		while (i < a && lhs[i] == rhs[i])
			i++;
		if (i == a)
			return true;
		else
			return false;
	}
	if (a > b) {
		int i = 0;
		while (i < b && lhs[i] == rhs[i])
			i++;
		if (i == b)
			return false;
		else
			return true;
	}
	if (a == b) {
		int i = 0;
		while (i < a && lhs[i] == rhs[i])
			i++;
		if (i < a) {
			if (lhs[i] < rhs[i])
				return true;
			else
				return false;
		}
		else
			return false;	
	}	 
}
bool operator == (const Array&lhs,const Array&rhs) {
	int a = lhs.getSize();
	int b = rhs.getSize();
	if (a == b) {
		int i = 0;
		while (i < a && lhs[i] == rhs[i])
			i++;
		if (i == a)
			return true;
		else
			return false;
	}
	else
		return false;
}
const Array operator + (const Array&lhs,const Array&rhs) {
	int a = lhs.getSize();
	int b = rhs.getSize();
	static Array A(a+b,0);
	for (int i = 0; i < a; i++)
		A[i] = lhs[i];
	for (int i = 0; i < a + b; i++) 
		A[a+i] = rhs[i]; 
	return A;
}
using std::ostream;
ostream& operator << (ostream&os,const Array&rhs) {
	for (int i = 0; i < rhs.getSize(); i++) 
		cout  << rhs[i] << " ";
	return os; 
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值