ssy/c++上机思考题4.cpp

57 lines
1.4 KiB
C++
Raw Permalink Normal View History

2024-08-05 20:42:46 +05:30
//定义一个数组类模版,然后以它为基类模板,如何定义一个派生类模板?
#include <iostream>
#include <vector>
// 基类模板:数组类模板
template<typename T>
class Array {
protected:
std::vector<T> data;
public:
Array(int size) : data(size) {}
void set(int index, const T& value) {
data[index] = value;
}
T get(int index) const {
return data[index];
}
int size() const {
return data.size();
}
};
// 派生类模板:增强数组类模板
template<typename T>
class EnhancedArray : public Array<T> {
public:
EnhancedArray(int size) : Array<T>(size) {}
// 新增函数:求和
T sum() const {
T sum = 0;
for (const auto& element : this->data) {
sum += element;
}
return sum;
}
// 新增函数:平均值
double average() const {
if (this->data.empty()) {
return 0.0;
}
T sum = this->sum();
return static_cast<double>(sum) / this->data.size();
}
};
int main() {
EnhancedArray<int> arr(5);
for (int i = 0; i < 5; ++i) {
arr.set(i, i + 1);
}
std::cout << "Array elements: ";
for (int i = 0; i < arr.size(); ++i) {
std::cout << arr.get(i) << " ";
}
std::cout << std::endl;
std::cout << "Sum: " << arr.sum() << std::endl;
std::cout << "Average: " << arr.average() << std::endl;
return 0;
}