问题 E: oop实习-5.类的定义_深拷贝
题目描述
设计并实现一个动态整型数组类Vect,要求:
(1)实现构造函数重载,可以根据指定的元素个数动态创建初始值为0的整型数组,或根据指定的内置整型数组动态创建整型数组。
(2)设计拷贝构造函数和析构函数,注意使用深拷贝。
(3)设计存取指定位置的数组元素的公有成员函数,并进行下标越界,若越界则输出“out of boundary”。
(4)设计获取数组元素个数的公有成员函数。
(5)设计用于输出数组元素的公有成员函数,元素之间以空格分隔,最后以换行符结束。
在main函数中按以下顺序操作:
(1)根据内置的静态整型数组{1,2,3,4,5}构造数组对象v1,根据输入的整型数构造数组对象v2。
(2)调用Vect的成员函数依次输出v1和v2的所有元素。
(3)输入指定的下标及对应的整型数,设置数组对象v1的指定元素。
(4)根据数组对象v1拷贝构造数组对象v3。
(5)调用Vect的成员函数依次输出v1和v3的所有元素。
输入
用于构建数组对象v2的元素个数
用于设置数组对象v1的指定下标及元素值
输出
数组对象v1和v2的所有元素
数组对象v1和v3的所有元素
样例输入
10 6 6
样例输出
1 2 3 4 5 0 0 0 0 0 0 0 0 0 0 out of boundary 1 2 3 4 5 1 2 3 4 5
提示
#include <iostream>
using namespace std;
class Vect
{
int n;
int *arr;
public:
~Vect()
{
delete [] arr;
}
Vect ()
{
n = 5;
arr = new int[n];
for (int i = 0; i < 5; i++)
{
arr[i] = (i+1);
}
}
Vect(int _n) : n(_n)
{
arr = new int[n];
for (int i = 0; i < n; i++)
{
arr[i] = 0;
}
}
Vect(const Vect &s) : n(s.n)
{
arr = new int[n];
for (int i = 0; i< n; i++)
{
arr[i] = s.arr[i];
}
}
void Quyuansu (int a,int b)
{
if (a>= this -> n)
{
cout << "out of boundary" << endl;
}
else
{
this -> arr[a] = b;
}
}
int Qusize()
{
return this -> n;
}
void Print()
{
int i = 0;
for (i = 0; i < n-1; i++)
{
cout << arr[i] << " ";
}
cout << arr[n-1];
cout << endl;
}
} ;
int main()
{
Vect v1;
int n = 0;
cin >> n;
int n2 ,n3;
cin >> n2;
cin >> n3;
Vect v2(n);
v1.Print();
v2.Print();
v1.Quyuansu(n2,n3);
Vect v3(v1);
v1.Print();
v3.Print();
//int b;
//cin >> b;
return 0;
}