30/09/2018, 16:24

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 
";
    A.nhap();
    cout <<"nhap so phuc B 
";
    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ị!

... viết 18:36 ngày 30/09/2018

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.

Nguyễn Quảng Đại viết 18:37 ngày 30/09/2018

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 ạ!

Bài liên quan
0