Cách xây dựng toán tử nhập cin >> trong C++

Em có xây dựng một class soPhuc như bên dưới, Em đã làm được hàm nhap và hàm hienThi.

Bây giờ em muốn thực hiện hai hàm này bằng toán tử operator >>operator << .

Code em thực hiện như sau:

#include <iostream>
#include <conio.h>
#include <math.h>

using namespace std;

class soPhuc
{
public :
    float phanThuc, phanAo, modun;

    void nhap()
    {
        cout <<" nhap phan thuc : " ;
        cin >> phanThuc;
        cout <<" nhap phan ao la: ";
        cin >> phanAo;
        soPhuc();
        modun = phanThuc*phanThuc + phanAo*phanAo;
    }
    void hienThi()
    {
        cout << phanThuc;
        if (phanAo > 0 ) cout << " + " << phanAo <<"i";
        if (phanAo < 0 ) cout << " - " << -phanAo <<"i";
        cout << endl;
        cout <<"modun la: " << modun;
    }

    soPhuc operator +(soPhuc A)
    {
        soPhuc kq;
        kq.phanThuc = phanThuc + A.phanThuc;
        kq.phanAo = phanAo + A.phanAo;

        return kq;
    }
    soPhuc operator *(soPhuc A)
    {
        soPhuc kq;
        kq.phanThuc = phanThuc*A.phanThuc - phanAo*A.phanAo;
        kq.phanAo = phanAo*A.phanThuc + phanThuc*A.phanAo;
        return kq;
    }
    soPhuc operator -(soPhuc A)
    {
        soPhuc kq;
        kq.phanThuc = phanThuc - A.phanThuc;
        kq.phanAo = phanAo - A.phanAo;
        return kq;
    }
    soPhuc operator / (soPhuc A)
    {
        soPhuc kq;
        kq.phanThuc = (phanThuc*A.phanThuc + phanAo*A.phanAo)/(A.phanThuc*A.phanThuc + A.phanAo*A.phanAo);
        kq.phanAo = (phanAo*A.phanThuc - phanThuc*A.phanAo)/(A.phanThuc*A.phanThuc + A.phanAo*A.phanAo);
        return kq;
    }

};

int main(int argc, char *argv[])
{
    soPhuc A,B,C;
    cout <<"nhap so phuc A \n";
    A.nhap();
    cout <<"nhap so phuc B \n";
    B.nhap();
    A.hienThi();
    B.hienThi();
    getch();
    return 0;
}

Khi em viết toán tử như dưới thì bị lỗi như hình ạ

ostream& operator <<(ostream& s, const soPhuc &v)
{
    s << phanThuc;
    if (phanAo > 0 ) s << " + " << phanAo <<"i";
    if (phanAo < 0 ) s << " - " << -phanAo <<"i";
    s << endl;
    s <<"modun la: " << modun;
}

Đây là hình bị lỗi.
https://app.box.com/representation/file_version_23082470181/image_2048/1.png?shared_name=9n39ddmb7rf3evvhycld

Xin cảm ơn các anh chị!

Bạn nên khai báo hàm overload operator << trong class như sau:

friend ostream& operator<< (ostream& s, const soPhuc& v);

và sửa lại nội dung trong function này như sau (đặt nó bên ngoài class):

ostream& operator <<(ostream& s, const soPhuc& v) 	{
		s << v.phanThuc;
		if (v.phanAo > 0 ) s << " + " << v.phanAo <<"i";
		if (v.phanAo < 0 ) s << " - " << -(v.phanAo) <<"i"; 	
		s << endl;
		s <<"modun la: " << v.modun;
		return s;
}

Bạn truyền tham số vào function overload là đối tượng v, nhưng bạn lại sử dụng field phanAo của chính nó, ko phải của đối tượng v.

1 Like

Em cám ơn ạ cuối cùng thì em cũng biết thêm về cái hàm bạn cám ơn anh nhiều ạ!

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