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