【C++】用输入流运算符重载完成含有大量参数的对象构造

写作业时候遇到的一道题,图书管理系统。用到了多继承,友元函数,>>重载。
还解决了一点小问题:在运算符>>重载中输入含有空格的字符串。
解决办法:使用.get()吸收回车,再用getline()得到字符串。

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

class CBook{
    public:
    int bnum;
    string bname;
    string bpub;
    float bprice;

    CBook(int n=0,string boname="book",string pub="BITcon",float price=0):
        bnum(n),bname(boname),bpub(pub),bprice(price){}
};

class CAuthor{
    public:
    string aname;
    int aage;
    string writingtime;

    CAuthor(string name="111",int age=0,string time="2000 00 00"):
    aname(name),aage(age),writingtime(time){}
};

class CCard:public CBook,public CAuthor{
    private:
    string systemname;

    public:
    CCard(int n=0,string boname="book",string pub="BITcon",float price=0,string name="111",int age=0,string time="2000 00 00",string sysname="000")://默认形参要在最右边
    CBook(n,boname,pub,price),CAuthor(name,age,time),systemname(sysname){}

    void infodisplay();

    friend istream& operator >> (istream& ist, CCard& c);
};

void CCard::infodisplay(){
    cout<<"SysName:"<<systemname<<endl;
    cout<<"Num:"<<bnum<<endl;
    cout<<"BookName:"<<bname<<endl;
    cout<<"BookConcern:"<<bpub<<endl;
    cout<<"Price:"<<bprice<<endl;
    cout<<"AuthorName:"<<aname<<endl;
    cout<<"AuthorAge:"<<aage<<endl;
    
    //将日期字符串中的空格替换成-
    int i;
    for(i=0;i<writingtime.length();i++){
        if(writingtime[i]==' '){
            writingtime[i]='-';
        }
    }
    cout<<"PrintTime:"<<writingtime<<endl;
}

istream& operator >> (istream& ist, CCard& c){
    ist>>c.systemname>>c.bnum>>c.bname>>c.bpub>>c.bprice>>c.aname>>c.aage;
    //这里出现的问题是!cin不能吸收空格也不能吸收回车,要用getline则必须先用.get()把回车吸收了!
    //用char一个字符在>>后也不能吸收回车
    ist.get();
    getline(ist,c.writingtime);
    return ist;
}

int main(){
    CCard book1;
    cin>>book1;
    book1.infodisplay();

    return 0;
}


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值