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 + -
显示快捷键?