运算符重载相关问题 求解!!

完善 ParkingCard 类
在实习 3 中的 ParkingCard 类基础上,修改 getTotalExpense 方法,不再调用
MyTime 类的 getTimeSpan 方法,而是通过 operator-计算时间差。删除
ParkingCard 的 output 方法,通过重载 operator<<运算符进行替代。

public:
ParkingCard(double newRate) { rate = newRate; }
void setRate(double newRate) { rate = newRate; } //设置每小时费率
double getRate() const { return rate; }
void setParkingTime( const MyTime &time); //设置开始停车时间
void setLeavingTime( const MyTime &time ); //设置离开时间
double getTotalExpenses() const; //计算停车费用
//停车时间分钟数不足半小时按半小时计算,不足 1 小时按 1 小时计算
void output(); //输出停车起始时间、总时间、费率及总费用
friend std::ostream& operator<<( std::ostream& out, 
const ParkingCard& t);
private:
double rate; //停车费率,按元/每小时计算
MyTime parkingTime; //开始停车时间
MyTime leavingTime; //离开时间
};
测试的主程序如下:
int main(){
ParkingCard card(5);
card.setParkingTime(MyTime(9, 20) );
card.setLeavingTime(MyTime(11, 35) );
cout<<"Expenses: "<getTotalExpenses()<"Detailed info:\n";
cout<return 0;
}


```class ParkingCard{
class ParkingCard{
public:
    ParkingCard(double newRate) { rate = newRate; }
    void setRate(double newRate) { rate = newRate; } //设置每小时费率
    double getRate() const { return rate; }
    void setParkingTime(const MyTime &time); //设置开始停车时间
    void setLeavingTime(const MyTime &time ); //设置离开时间
    double getTotalExpenses() const; //计算停车费用
    //停车时间分钟数不足半小时按半小时计算,不足 1 小时按 1 小时计算
    friend std::ostream& operator<<(std::ostream& out, const ParkingCard& t);
private:
    double rate; //停车费率,按元/每小时计算
    MyTime parkingTime; //开始停车时间
    MyTime leavingTime; //离开时间
};

void ParkingCard::setParkingTime(const MyTime &time)
{
    parkingTime = time;
}

void ParkingCard::setLeavingTime(const MyTime &time )
{
    leavingTime = time;
}

double ParkingCard::getTotalExpenses() const
{
    int diff = (leavingTime - parkingTime).toMinute();
    double expenses = 0.0;
    if(diff <= 30){
        expenses = rate * 0.5;
    } else if (diff <= 60){
        expenses = rate;
    } else {
        expenses = rate * (diff / 60);
        if(diff % 60 > 30){
            expenses += rate * 0.5;
        }
    }
    return expenses;
}

std::ostream& operator<<(std::ostream& out, const ParkingCard& t)
{
    int diff = (t.leavingTime - t.parkingTime).toMinute();
    double expenses = t.getTotalExpenses();
    out << "Start time: " << t.parkingTime << ", Duration: ";
    if(diff < 60){
        out << diff << " minutes";
    } else {
        out << (diff / 60) << " hours and " << (diff % 60) << " minutes";
    }
    out << ", Rate: " << t.rate << "/hour" << ", Total expense: " << expenses;
    return out;
}