Nạp chồng tính tổng với template C++

Em chào mọi người ạ. Em đang vướng ở phần nạp chồng tính tổng của 2 mảng kiểu int và double, em có viết như dưới đây ạ. Mọi người cho em xin ý kiến với ạ.

#include <iostream>
using namespace std;

template <class T>
class Array {
    private:
        T *array;
        int size;
    public:
        Array(int n) {
            size = n;
            array = new T[size];
        }
        friend istream& operator>>(istream &in, Array <T>&a)
        {
            for(int i=0;i<a.size;i++)
            {
                cout<<"a["<<i<<"] = "; in>>a.array[i];
            }
            return in;
        }
        friend ostream& operator<<(ostream &out, Array <T>a)
        {
            for(int i=0;i<a.size;i++)
            {
                out<<a.array[i]<<" ";
            }
            return out;
        }
        Array<T> operator+(const Array <T> &a)
        {
            Array <T> kq;
            for (int i=0;i<a.size;i++)
            {
                kq.array[i] = this->array[i] + a.array[i];
            }
            return kq;
        }
};

int main() {
    int n;
    cout<<"Nhap so phan tu mang: "; cin>>n;
    Array<int> intArray = Array<int>(n);
    Array<double> doubleArray = Array<double>(n);
    cout<<"Nhap mang double:"<<endl;
    cin>>doubleArray;
    cout<<doubleArray;
    cout<<"\nNhap mang int:"<<endl;
    cin>>intArray;
    cout<<intArray;
    cout<<"\nTong 2 mang la: "<<endl;
    cout<<doubleArray + intArray;
    return 0;
}

Chắc khi chạy sẽ có cả đống lỗi phải không?
Mình đọc sơ qua thì thấy mấy chỗ không hợp lý khi dùng template rồi đấy.
Nếu bạn dùng template thì đảm bảo các lớp class phải có đủ các toán tử/phương thức mà bạn dùng với nó.
Còn toán tử cộng operator+ thì roc là bạn đang muốn cộng 2 kiểu khác nhau chứ đâu phải cùng kiểu, nên khai báo Array<T> operator+(const Array<T>& a) là không ổn rồi.

2 Likes

Mình chưa làm thử overloading operator với 2 kiểu dữ liệu khác nhau trong template class. Nhưng chắc phải khai báo thêm 1 template khác ngay trước operator bạn định overload. Giống như này:

Bạn fix mớ lỗi compile của bạn trước đã rồi làm theo ví dụ trên xem thử.

4 Likes
83% thành viên diễn đàn không hỏi bài tập, còn bạn thì sao?