模板类,大部分代码都写出来了
double& va = arr[index]; //返回引用
double vb = arr[index]; //返回值
返回引用的,修改va,也会改变数组中的值。
返回值的,修改vb,不会改变数组中的值。
#include <iostream>
using namespace std;
template <typename T, int N >
class Array {
T data[N];
int nLength; //实际存放的元素个数
public:
Array() { nLength = 0; }
int getLength() { return nLength; } //取实际元素个数
bool put(T value) //将value加入data[]中
{
if (nLength < N)
{
data[nLength++] = value;
return true;
}
return false;
}
bool set(int index, T value) //设置某元素的值
{
if (index < nLength)
{
data[index] = value;
return true;
}
return false;
}
bool get(int index, T& value) //获取某个元素的值,放入value中
{
if (index < nLength)
{
value = data[index];
return true;
}
return false;
}
T& operator[] (int index) //取某个位置元素的值,返回该值,可以与++或--联用
{
return data[index];
}
T operator[] (int index) const
{
T v = data[index];
return v;
}
virtual ~Array() {}
};
int main()
{
Array<double, 10> arr;
double v;
cout << "请输入3个数存放如数组:" << endl;
for (int i = 0; i < 3; i++)
{
cin >> v;
arr.put(v); //调用put插入数组
}
cout << "当前存放的元素个数:" << arr.getLength() << endl;
int index = 0;
cout << "请输入要获取的元素下标(从0开始):";
cin >> index;
if (arr.get(index, v))
cout << "该元素为:" << v << endl;
else
cout << index << "大于实际元素个数,获取失败!" << endl;
cout << "请输入需要修改的元素下标及新值:";
cin >> index >> v;
if (arr.set(index, v))
cout << "设置成功!" << endl;
else
cout << index << "大于实际元素个数,设置失败!" << endl;
cout << "请输入要获取的元素下标(从0开始):";
cin >> index;
double& va = arr[index]; //返回引用
cout << "double& va = arr["<< index << "],调用返回值为引用的重载函数,va的值为:" << va << endl; //使用[]注意不要越界
va = 10; //
cout << "设置va=10后,double vb = arr["<< index << "],调用返回值为普通类型的重载函数,vb值为:";
double vb = arr[index];
cout << vb;
return 0;
}
返回如果是值,相当于拷贝了一份,但是修改它是不会修改原始数据的。适合只读的情况。
返回如果是值,相当于拷贝了一份,但是修改它是不会修改原始数据的。适合只读的情况。
该回答结合了ChatGPT:
以下是根据题目要求编写的模板类 Array 的代码实现,同时还包含了一个简单的测试程序。
#include <iostream>
using namespace std;
template <typename T, int N>
class Array {
private:
T data[N];
int Length;
public:
Array() {
Length = 0;
}
int getLength() const {
return Length;
}
bool put(T value) {
if (Length >= N) {
return false;
}
data[Length++] = value;
return true;
}
bool set(int index, T value) {
if (index >= 0 && index < Length) {
data[index] = value;
return true;
}
return false;
}
bool get(int index, T& value) const {
if (index >= 0 && index < Length) {
value = data[index];
return true;
}
return false;
}
T& operator[](int index) {
return data[index];
}
T operator[](int index) const {
return data[index];
}
virtual ~Array() {}
};
int main() {
Array<int, 5> arr;
cout << "put(1): " << arr.put(1) << endl;
cout << "put(2): " << arr.put(2) << endl;
cout << "put(3): " << arr.put(3) << endl;
cout << "put(4): " << arr.put(4) << endl;
cout << "put(5): " << arr.put(5) << endl;
cout << "put(6): " << arr.put(6) << endl;
cout << "getLength(): " << arr.getLength() << endl;
cout << "set(2, 100): " << arr.set(2, 100) << endl;
int value;
cout << "get(2, value): " << arr.get(2, value) << ", value: " << value << endl;
cout << "arr[2]: " << arr[2] << endl;
arr[2]++;
cout << "arr[2]: " << arr[2] << endl;
return 0;
}
不知道你这个问题是否已经解决, 如果还没有解决的话: