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

em có bài tập về template mà chưa có định hướng để làm, nhờ các bạn, anh chị, chỉ dùm được không a? dưới đây là đề bài
Sử dụng Template, operator định nghĩa cho lớp Number tương ứng cho kiểu dữ
liệu số tổng quát với các toán tử cơ bản:
<<, >> =, +, -, *, +=, ==.

#include<iostream>
using namespace std;
template<class T>
class Number
{
private:
T data;
public:
Number(void);
Number(const T);
~Number(void);
Number<T> operator =(T );
Number<T> operator +(Number<T> ); 
Number<T> operator -(Number<T> ); 
Number<T> operator *(Number<T> ); 
Number<T> operator /(Number<T> ); 
Number<T> operator +=(Number<T> ); 
friend ostream& operator<<(ostream&, const Number<T>&);
friend istream& operator>>(istream&, const Number<T>&);
bool operator ==(T );
};
2 Likes

sao k ai chỉ giúp e với? em đang rất gấp

1 Like

Có anh boss server vào chỉ giúp em ngay ý mà :blush:

2 Likes

@oanh em chờ chút, anh đang bận.
@Is2IT hehe, may mà tuần này anh có công việc về VN, để lát có thời gian sẽ làm bài này.

3 Likes

dạ.vậy cũng được. cảm ơn anh

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;
}
4 Likes

dạ.em cảm ơn nhiều ạ
sao anh viết thì em hiểu mà phần tư duy để viết thì em viết ra lỗi quá trời ak

2 Likes

ak. anh cho em hỏi sao ở chỗ += nó cũng giống toán tử + vậy anh?

Hai toán tử này anh implement khác nhau chứ em

  • opertor+ trả về giá trị của phép cộng

    return m_data + value._mdata

  • operator+= gán giá trị của m_data bẳng tổng của m_data + value.m_data

    m_data = m_data + value.m_data;

1 Like

da.em hiểu rồi.em cảm ơn anh

1 Like

các bác cho em hỏi:
struct AAA {…};
void XYZ (AAA*& abc);

em không hiểu cái khúc AAA*& abc là thế nào.?
ai chỉ em với.
ps. em là newbie.
thanks ạ.

@neverbackdown9x5f

& có nghĩa là reference. Bạn xem bài

* là con trỏ, chắc ai cũng biết rồi.

*& có nghĩa là reference đến pointer. Mà reference cho phép thay đổi được giá trị mà nó reference tới. Vậy ở đây con trỏ có thể thay đổi được.

Xem swap by reference

Hoặc bạn có thể thử như sau:

#include <iostream>

void change_pointer(int * p)
{
    p = 0;
}

void change_pointer_by_ref(int *& p)
{
    p = 0;
}

int main()
{
    int * p = new int;
    std::cout << "p = " << p << std::endl; // 0x372160
    change_pointer(p);
    std::cout << "p = " << p << std::endl; // 0x372160
    change_pointer_by_ref(p);
    std::cout << "p = " << p << std::endl; // 0
    return 0;
}

Thử in giá trị của p sau khi sử dụng 2 hàm. Thì chỉ có hàm change_pointer_by_ref là giá trị của con trỏ p bị thay đổi thôi.

3 Likes

ai có tài liệu về bài tập phần hướng đối tg trong C++ ko ạ???

@chazo1994

1 Like

các anh chị ơi! em đang có bài tập
Xây dựng ứng dụng quản lý thông tin nhân sự cho công ty. Nhân sự công ty hiện tại gồm
hai loại:

  • Administrators
  • Employees.
    trong c++ phần form.
    nhờ các anh chị chỉ dẫn dùm em với.

@oanh em nói chi tiết hơn xem, bài tập đó là console hay là form? Form thì sử dụng cái gì, MFC?

Hai loại này định nghĩa ra sao?

  • Administrators
  • Employees.
1 Like

Định hướng rõ ràng như vậy rồi thì bạn còn vướng mắc chỗ nào nữa? @oanh

1 Like

phần đăng nhập hệ thống dùng Exception Handling.
mà cái phần đó thì em không hiểu lắm

Bạn sử dụng try, catch thôi.

thực sự là em cũng không hiểu. nhưng cảm ơn mọi người đã giúp đỡ.

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