HÀM VÀ LỚP KHUÔN MẪU ( TEMPLATE)
Chào mn ạ. Em là newbie. Hiện em đang học về C/C++, em đang tìm hiểu về hàm và lớp khuôn mẫu ( template). Em có làm bài toán : Tổng quát hóa kiểu dữ liệu cho lớp Array. Em đã viết được cho hàm nạp chồng toán tử nhập xuất, còn phần cho toán tử tính toán như +,-,*,.. Mong nhận được sự góp ý của mn ạ. Phần code đây ạ:
//2. Tong quat hoa kieu du lieu cho lop Array ( lop Array da dinh nghia trong cac assignment truoc)
#include <iostream>
using namespace std; template<class T> class Array { int n; T* data; public: Array(int _n = 0, T _d = 0) { n = _n; data = new T[n]; for (int i = 0; i < n; i++) { data[i] = _d; } }
~Array()
{
delete[] data;
}
Array(const Array& a) {
n = a.n;
data = new T[n];
for (int i = 0; i < n; i++) {
data[i] = a.data[i];
}
}
template<class T, class OP>
void operation(T* p1, T* &result, int n, OP op)
{
result.n = n;
result.data= new T[n];
for (int i = 0; i < n; i++)
{
result.data[i] = op(data[i], p1[i]);
}
}
template<class T>
T add(const T& a, const T& b)
{
return a+b;
}
template<class T>
T minus(const T& a, const T& b)
{
return a - b;
}
template<class T>
T multiply(const T& a, const T& b)
{
return a * b;
}
template<class T>
T devide(const T& a, const T& b)
{
int n;
for (int i = 0; i < n; i++)
if (b[i] == 0) break;
else return a / b;
}
// nop chong []
T operator[] (int index)
{
return data[index];
}
T operator() ();
// delc cho op<<
template <class T1>
friend ostream& operator<<(ostream& os, const Array<T1>& a);
template <class T2>
friend istream& operator>>(istream& is, Array<T2>& a);
};
template<class T> T Array<T>:: operator() () { T max = data[0]; for (int i = 0; i < n; i++) { if (max < data[i]) max = data[i]; } return max; } template<class T> ostream& operator<<(ostream& os, const Array<T>& a) // { os << endl << "Mang co " << a.n << " phan tu." << endl; os << "Lan luot la: "; for (int i = 0; i < a.n; i++) { os << a.data[i] << " "; } return os; } template<class T> istream& operator>>(istream& is, Array<T>& a) // { cout << "Nhap so phan tu:"; is >> a.n; cout << "Cac phan tu lan luot la:"; a.data = new T[a.n]; for (int i = 0; i < a.n; i++) { is >> a.data[i]; } return is; } int main() { Array<int> a(5, 1); cin >> a; cout << a << endl; cout << "Phan tu max trong mang là :"; cout << a()<< endl; Array<int> b(6, 1); cin >> b; // Array<int> d(6,1); //operation(a, b, d, 6, d.multiply<int>); //cout << "Mang result: " << endl;
}