p51.cpp
来自「《C++编程指南(续编)》的一些程序源代码」· C++ 代码 · 共 103 行
CPP
103 行
#include <fstream.h>
#include <string.h>
char *makeCopy(char * pszS)
{
char * pszT=new char[strlen(pszS)+1];
strcpy(pszT,pszS);
return pszT;
}
class Student
{
public:
Student(char * pLN,char * pFN,
int nGrd,unsigned long ulId);
Student();
~Student();
void display(ostream& out)const;
void read(istream& in);
protected:
char * pLName;
char * pFName;
int nGrade;
unsigned long ulID;
};
Student::Student(char * pLN,char * pFN,int nGrd,unsigned long ulId)
{
pLName=makeCopy(pLN);
pFName=makeCopy(pFN);
nGrade=nGrd;
ulID=ulId;
}
Student::Student()
{
pLName=makeCopy("<invalid student>");
pFName=makeCopy("<invalid student>");
nGrade=0;
ulID=0L;
}
Student::~Student()
{
delete pLName;
delete pFName;
}
void Student::display(ostream& out)const
{
out<<pLName<<" , "<<pFName
<<" - "<<ulID
<<"(Grade"<<nGrade<<")";
}
void Student::read(istream& in)
{
delete pLName;
delete pFName;
char buffer[80];
do
{
in.getline(buffer,sizeof buffer,' ');
}while(buffer[0]=='\0'&&!in.eof());
pLName=makeCopy(buffer);
do
{
in.getline(buffer,sizeof buffer,' ');
}while(buffer[0]=='\0'&&!in.eof());
pFName=makeCopy(buffer);
in>>nGrade>>ulID;
in.getline(buffer,sizeof buffer);
}
ostream& operator<<(ostream& out,const Student& s)
{
s.display(out);
return out;
}
istream& operator>>(istream& in,Student& s)
{
s.read(in);
return in;
}
int main(int,char **)
{
ifstream in("D:\\ifile.txt");
int i=0;
Student sStudent;
for(;;)
{
in>>sStudent;
if(in.eof())
{
break;
}
cout<<"Student #"<<i++
<<"-"<<sStudent<<"\n";
}
return 0;
}
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?