Nạp chồng toán tử nhập

Em xin chào mọi người. Em có 1 thắc mắc là em muốn ở hàm nạp chồng toán tử nhập của class rauQua có nhập cả những thông tin có trong hàm nạp chồng toán tử nhập của class sanPham thì em phải làm thế nào ạ?

#include <iostream>
#include <vector>
using namespace std;

class sanPham {
    protected:
        string ten;
        float gia;
    public:
        friend istream& operator>>(istream &in, sanPham &sp);
        friend ostream& operator<<(ostream &out, sanPham sp);
};

class rauQua:public sanPham {
    private:
        float cannang;
    public:
        friend istream& operator>>(istream &in, rauQua &rq);
        friend ostream& operator<<(ostream &out, rauQua rq);
        float thanhtoan() {
            return gia*cannang;
        }
};

istream& operator>>(istream &in, sanPham &sp)
{
    cout<<"Nhap ten SP: "; getline(in, sp.ten);
    cout<<"Nhap gia SP: "; in>>sp.gia;
    return in;
}

ostream& operator<<(ostream &out, sanPham sp)
{
    out<<"\nTen SP: "<<sp.ten;
    out<<"\nGia SP: "<<sp.gia;
    return out;
}

istream& operator>>(istream &in, rauQua &rq) 
{
    cout<<"Nhap can nang: "; in>>rq.cannang;
    return in;
}

ostream& operator<<(ostream &out, rauQua rq)
{
    out<<"\nCan nang: "<<rq.cannang;
    return out;
}

int main() {
    char t;
    int count = 0;
    rauQua *arr = new rauQua[10];
    while (t!='n' || count == 10)
    {
        cout<<"Nhap thong tin SP:"<<endl;
        cin>>arr[count];
        count += 1;
        if(count == 10) break;
        cout<<"Nhap tiep (y/n): "; cin>>t;
        if (t=='n') break;
        cin.ignore();
    }
    float max = 0;
    for(int i=0; i<count;i++)
    {
        if(arr[i].thanhtoan() > max) max = arr[i].thanhtoan();
    }
    cout<<"Cac san pham thanh toan nhieu nhat: "<<endl;
    for(int i=0;i<count;i++)
    {
        if(arr[i].thanhtoan() == max)
        {
            cout<<arr[i];
        }
    }
    return 0;
}

Theo mình thì ở hàm chồng tt >> của lớp rauQua sẽ lấy luôn 3 giá trị. ( 2 giá trị của lớp cha )

in >> (sanPham) sp;
Tổng quát là gọi phương thức ứng với superclass trước đã.

3 Likes

nếu mình để in>> (sanPham) sp trong hàm nhập của class rauQua thì cái biến sp khai báo như nào trong hàm đấy ạ?

Ý @rogp10in >> (sanPham) rq; bạn ép kiểu về sanPham rồi gọi toán tử >> bình thường.

1 Like

mình có viết lại hàm như này nhưng nó không chạy được, bạn giúp mình với ạ

istream& operator>>(istream &in, rauQua &rq) 
{
    in >> (sanPham) rq;
    cout<<"Nhap can nang: "; in>>rq.cannang;
    return in;
}

Chỗ này phải là in >> (sanPham&)rq; hoặc chuẩn hơn là in >> static_cast<sanPham&>(rq); chứ nhỉ?

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