30/09/2018, 16:01
[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;
}
Bài liên quan
@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