[Wiki] Ví dụ cơ bản về Class Template trong C++

Continuing the discussion from Tổng Hợp C,C++: Hỗ trợ giải tất cả các bài tập C & C++:

Tạm thời post thế này đã, có gì sửa sau. @oanh Có gì thắc mắc cứ hỏi ở đây, tối a có thời gian sẽ lên giải thích. Giờ bận tí.

#include <iostream>

template<class T>
class Number
{
private:
    T m_data;
public:
    Number(void) : m_data( T() )
    {}
    Number(const T value) : m_data ( value )
    {}
    ~Number(void)
    {}
    Number<T>& operator =(const Number<T> & value)
    {
        m_data = value.m_data;
        return *this;
    }
    Number<T> operator +(const Number<T> & value )
    {
        return m_data + value.m_data;
    }
    Number<T> operator -(const Number<T> & value )
    {
        return m_data - value.m_data;
    }
    Number<T> operator *(const Number<T> & value )
    {
        return m_data * value.m_data;
    }
    Number<T> operator /(const Number<T> & value )
    {
        return m_data / value.m_data;
    }
    Number<T>& operator+=(const Number<T> &);

    friend std::ostream& operator<<(std::ostream& out, const Number<T>& value)
    {
        return out << value.m_data;
    }
    friend std::istream& operator>>(std::istream& in, Number<T>& value)
    {
        return in >> value.m_data;
    }
    bool operator==(const Number<T> & value)
    {
        return m_data == value.m_data;
    }
};

// Vi du dinh nghia o ngoai class
template <class T>
Number<T>& Number<T>::operator+=(const Number<T>& value)
{
    m_data = m_data + value.m_data;
    return *this;
}

int main()
{
    // Number(void)
    Number<int> num1;
    std::cout << "Number(void): num1 = " << num1 << std::endl;
    // Number(const T value)
    Number<int> num2(3);
    std::cout << "Number(const T value): num2 = " << num2 << std::endl;

    // Number<T>& operator =
    num1 = 5;
    std::cout << "Number<T>& operator =: num1 = " << num1 << std::endl;

    // Number<T> operator +
    std::cout << "Number<T>& operator +: num1 + num2 = " << num1 + num2 << std::endl;

    // Number<T> operator -
    std::cout << "Number<T>& operator -: num1 - num2 = " << num1 - num2 << std::endl;

    // Number<T> operator *
    std::cout << "Number<T>& operator -: num1 * num2 = " << num1 * num2 << std::endl;

    // Number<T> operator /
    std::cout << "Number<T>& operator -: num1 / num2 = " << num1 / num2 << std::endl;

    // Number<T> operator +=
    num1 += num2;
    std::cout << "Number<T>& operator -: num1 += num2 => num1 = " << num1 << std::endl;

    // Number<T> operator ==
    if (num1 == num2)
        std::cout << "num1 == num2" << std::endl;
    else
        std::cout << "num1 != num2" << std::endl;

    // operator>>
    std::cout << "Nhap vao num3: ";
    Number<int> num3;
    std::cin >> num3;
    std::cout << "num3 = " << num3 << std::endl;
    return 0;
}
5 Likes

@daynhauhoc Dẫn link bài này vào topic tổng hợp C++ nhé.

anh @ltd e muốn hỏi chút
ví dụ e có lớp sinh viên, lớp môn học, lưu trữ bằng linked list
và e muốn tạo template linked list để dùng chung cho 2 lớp trên
vấn đề là khi e muốn thay đổi thông tin , hoặc tìm kiếm 1 trong 2 lớp trên, thì hàm tìm kiếm , thay đổi giá trị trong template của linked list sẽ làm ntn ?
vì mỗi lớp có thuộc tính riêng
như các kiểu dữ liệu đơn giản như int, float, string thì dễ nhưng đây lại là kiểu tự định nghĩa

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