写作业时候遇到的一道题,图书管理系统。用到了多继承,友元函数,>>重载。
还解决了一点小问题:在运算符>>重载中输入含有空格的字符串。
解决办法:使用.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;
}