C++ 模板类 Array 实现:类型参数优化

以下代码展示了使用 C++ 模板实现一个通用的数组类 Array:c++#include #include using namespace std;

template class Array { template friend ostream& operator<<(ostream& out, Array& ra); template friend istream& operator>>(istream& in, Array& ra);

private: T* m_arr; int m_size;

public: Array(int size) : m_size(size) { m_arr = new T[size]; memset(m_arr, 0, sizeof(T) * size); } ~Array() { delete[] m_arr; }

T& operator[](int index) {        return this->m_arr[index];    }

int size() {        return m_size;    }};

template ostream& operator<<(ostream& out, Array& ra) { for (int i = 0; i < ra.m_size; i++) { out << ra.m_arr[i] << ' '; } return out;}

template istream& operator>>(istream& in, Array& ra) { for (int i = 0; i < ra.m_size; i++) { in >> ra.m_arr[i]; } return in;}

int main() { Array Aa(5);

cin >> Aa;

cout << Aa << endl;}

问题: 在上面的代码中,T1 可以改成 T 吗?为什么?

解答: 可以改成'T',因为在这个代码中,模板参数'T1'和类模板的类型参数'T'没有任何区别,它们都代表同一个类型。所以可以将'T1'改为'T',代码仍然能够正常工作。

**代码优化:**c++#include #include using namespace std;

template class Array { friend ostream& operator<<(ostream& out, Array& ra); friend istream& operator>>(istream& in, Array& ra);

private: T* m_arr; int m_size;

public: Array(int size) : m_size(size) { m_arr = new T[size]; memset(m_arr, 0, sizeof(T) * size); } ~Array() { delete[] m_arr; }

T& operator[](int index) {        return this->m_arr[index];    }

int size() {        return m_size;    }};

template ostream& operator<<(ostream& out, Array& ra) { for (int i = 0; i < ra.m_size; i++) { out << ra.m_arr[i] << ' '; } return out;}

template istream& operator>>(istream& in, Array& ra) { for (int i = 0; i < ra.m_size; i++) { in >> ra.m_arr[i]; } return in;}

int main() { Array Aa(5);

cin >> Aa;

cout << Aa << endl
C++ 模板类 Array 实现:类型参数优化

原文地址: http://www.cveoy.top/t/topic/b1Q5 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录