Asked Jan 10th, 2:25 PM 41 1 0
  • 41 1 0
0

HÀM VÀ LỚP KHUÔN MẪU ( TEMPLATE)

Share
  • 41 1 0

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;

}

Viblo
Let's register a Viblo Account to get more interesting posts.