57 lines
1.4 KiB
C++
57 lines
1.4 KiB
C++
|
//定义一个数组类模版,然后以它为基类模板,如何定义一个派生类模板?
|
||
|
#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;
|
||
|
}
|