插入运算符的重载可以包含空格,,求指教啊

爬格子的瘦书生 2013-07-03 02:36:48
要求对“<<”和“>>”运算符进行重载。考虑到输人学生(教工)姓名时,名字中可能引入空格,所以重载“>>”运算符时,需要满足这个要求。
...全文
451 12 打赏 收藏 转发到动态 举报
写回复
用AI写文章
12 条回复
切换为时间正序
请发表友善的回复…
发表回复
橡木疙瘩 2013-07-03
  • 打赏
  • 举报
回复
你要求可以输入空格,但总要先提出一个定界规则吧?总不能又“可以输入空格”,又“遇到空格结束输入”,这样的逻辑无论如何都无法实现。 当输入一个带空格的名字时,到底让输入者如何表示这个名字输入完毕?如果用换行或者某一个特殊字符,那就简单了,直接用getline:

   string name;
   getline( cin, name );//用换行表示输入结束
   getline( cin, name, '#');//用'#'表示输入结束
qzf362269994 2013-07-03
  • 打赏
  • 举报
回复
表示学生类中找不到operator>>重载
rocktyt 2013-07-03
  • 打赏
  • 举报
回复
你这哪里有用到重载的>>? 代码里都是一项一项cin>>进来的啊…………
  • 打赏
  • 举报
回复
}
class Teacher:virtual public people
{
private:
	string department;
	string professionaltitle;
public:	
	 double salary;	
	 long int teachernumber;
	 Teacher(){}
	 Teacher(string name1,string sex1,string birthday1,int age1,long int teachernumber1,string department1,string professionaltitle1,double salary1);
     void AddData2();                //数据添加函数
     void DeleteData(int k);         //数据删除函数
	 void UpdataData(int k);         //数据修改函数
     void SearchData(long int teachernumber1,string name1,string sex1);   //数据查找函数
	 void DisplayData2();         //数据显示函数
};
Teacher::Teacher(string name1,string sex1,string birthday1,int age1,long int teachernumber1,string department1,string professionaltitle1,double salary1)
:people(name1,sex1,birthday1,age1)
{ 
 	 teachernumber=teachernumber1;
   	 department=department1;
	 professionaltitle=professionaltitle1;
	 salary=salary1;	
}
void Teacher::AddData2()            //数据添加函数定义
{
	people::AddData();
    cout<<"请输入教工号: ";
    cin>>teachernumber;
	cout<<"请输入所在部门: ";
	cin>>department;
	cout<<"请输入职称: ";
	cin>>professionaltitle;
    loop:cout<<"请输入工资: ";     //goto语句来实现对负数重新输入,loop为标示符
	cin>>salary;
	try
	{
	    if(salary<0)
			throw salary;
	}
	catch(double)
	{
	   cout<<"工资输入有误,请重新输入!!!"<<endl;
	   goto loop;                  //goto语句来实现对负数重新输入
	}
	cout<<"数据添加成功!!!"<<endl;
}
void Teacher::DeleteData(int k)            //数据删除函数定义
{  	
    if(teachernumber==k)
	{
	 	teachernumber=0;                    //令教工号为0,来表示数据数据删除
		y=0;                                     //判断因子
	    cout<<"数据删除成功!!!"<<endl; 
	}
     if(x==num2-1 && y==1)
		cout<<"无此教工号数据,删除失败!!!"<<endl;
}
void Teacher::UpdataData(int k)           //数据修改函数定义
{
    if(k==teachernumber)                   //判断输入数据是否村子
	{
		cout<<"原始的职称为: "<<professionaltitle<<endl<<"原始的工资为: "<<salary<<endl;
		cout<<"请输入修改后的职称: ";
		   cin>>professionaltitle;
		cout<<"请输入修改后的工资: ";
           cin>>salary;  
		 y=0;                               //判断因子
	     cout<<"数据修改成功!!!"<<endl;
	}
	if(x==num2-1 && y==1)
		cout<<"无此教工号数据,修改失败!!!"<<endl;
}
void Teacher::SearchData(long int teachernumber1,string name1,string sex1)  //查询函数定义
{
      if(teachernumber1==teachernumber && name1==name && sex1==sex)
	  {
		  DisplayData2();
		  y=0;
	      cout<<"查询成功!!!"<<endl;
	  }	
	  if(x==num2-1 &&y==1)
		  cout<<"查询失败,无此数据!!!"<<endl;
}
void Teacher::DisplayData2()      //数据显示函数定义
{
	cout<<"\t\t\t********教师数据显示********"<<endl;
	people::DisplayData();
	cout<<"教工号\t\t"<<"部门\t\t"<<"职称\t\t"<<"\t工资"<<endl;
    cout<<teachernumber<<"\t"<<department<<"\t\t"<<professionaltitle<<"\t\t"<<salary<<endl;
}
template<typename T1,typename T2,typename T3>   //函数模板,用来求成绩和工资最大值
int FindMaxData(T1 *array1,T2 *array2,T3 a)     //三个形参分别为对象数组,成绩或者工资的数组,对象数组的长度
{
	T3 max=array2[0];                         //把第一个元素赋值给max	
    int i=0,k=0;
	for(i=0;i<a;i++)
		if(array2[i]>=max)
		{
			max=array2[i];                        
			k=i;                          //找寻最大值,而且把最大值的下标记录
		}
	return k;
}
void menu()                                //菜单函数
{
   cout<<"\t\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1学校人员信息管理系统\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\n";
   cout<<"\t\1  ╭︿︿︿╮                            ╭︿︿︿╮  \1\t\n";
   cout<<"\t\1  {/ o  o /}          欢迎使用          {/ o  o /}  \1\t\n";
   cout<<"\t\1   ( (oo) )                              ( (oo) )   \1\t\n";
   cout<<"\t\1    ︶︶︶                                ︶︶︶    \1\t\n";
   cout<<"\1\1\1\1\1\1\1\1                   1-增加一位人员记录                \1\1\1\1\1\1\1\1\n";
   cout<<"\1\1\1\1\1\1\1\1                   2-删除一个人员记录                \1\1\1\1\1\1\1\1\n";
   cout<<"\1\1\1\1\1\1\1\1                   3-修改一个人员记录                \1\1\1\1\1\1\1\1\n";
   cout<<"\1\1\1\1\1\1\1\1                   4-查找记录                        \1\1\1\1\1\1\1\1\n";
   cout<<"\1\1\1\1\1\1\1\1                   5-英语成绩(工资最高)              \1\1\1\1\1\1\1\1\n";
   cout<<"\1\1\1\1\1\1\1\1                   6-显示全部人员记录                \1\1\1\1\1\1\1\1\n";
   cout<<"\1\1\1\1\1\1\1\1                   7-从磁盘读取数据                  \1\1\1\1\1\1\1\1\n";
   cout<<"\1\1\1\1\1\1\1\1                   8-保存数据到磁盘                  \1\1\1\1\1\1\1\1\n";
   cout<<"\1\1\1\1\1\1\1\1                   9-退出系统                        \1\1\1\1\1\1\1\1\n";
   cout<<"\t\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\n";	
}
  • 打赏
  • 举报
回复
[code=c#include<iostream> #include<string> #include<fstream> #include<windows.h> using namespace std; /*using std::cin; using std::endl; using std::cout; using std::ostream; using std::istream; using std::string;*/ int num1=5,num2=5,x=0,y=1;//num为对象数组的长度,其他为判断因子 /*******基类*******/ class people { protected: string name; string sex; string birthday; int age; public: people(string name1,string sex1,string birthday1,int age1); people(){} void AddData(); //添加数据 virtual void DeleteData(int k)=0; //删除数据 virtual void UpdataData(int k)=0; //修改数据 virtual void SearchData(long int studentnumber1,string name1,string sex1)=0; //查询数据 void DisplayData(); //显示数据 /*friend istream &operator>>(istream& in,people& pe);*/ }; /*istream &operator>>(istream& in,people& pe) { in.getline(pe.name,30,'\n'); //使其能够读入字符串中的空格 in>>pe.age; return in; }*/ people::people(string name1,string sex1,string birthday1,int age1) //构造函数定义 { name=name1; sex=sex1; birthday=birthday1; age=age1; } void people::AddData() //添加数据函数定义 { cout<<"请输入名字: "; cin>>name; cout<<"请输入性别: "; cin>>sex; cout<<"请输入出生日期: "; cin>>birthday; cout<<"请输入年龄: "; cin>>age; } void people::DisplayData() //显示数据函数定义 { for(int i=0;i<80;i++) cout<<"\1"; cout<<"姓名\t性别\t出生日期\t年龄\t"<<endl; cout<<name<<"\t"<<sex<<"\t"<<birthday<<"\t"<<age<<endl; } /********学生类*******/ class Student:virtual public people { private: string major; string electiveslesson; int electivessore; public: int basesore[3]; long int studentnumber; Student(){} Student(string name1,string sex1,string birthday1,int age1,long int studentnumber1,string major1,int chinese,int math,int english,string electiveslesson1,int electivessore1); void AddData1(); //添加数据 void DeleteData(int k); //删除数据 void UpdataData(int k); //修改数据 void SearchData(long int studentnumber1,string name1,string sex1); //查询数据 void DisplayData1(); //显示数据 }; Student::Student(string name1,string sex1,string birthday1,int age1,long int studentnumber1,string major1,int chinese,int math,int english,string electiveslesson1,int electivessore1) :people(name1,sex1,birthday1,age1) { studentnumber=studentnumber1; major= major1; basesore[0]=chinese; basesore[1]=math; basesore[2]=english; electiveslesson=electiveslesson1; electivessore=electivessore1; } void Student::AddData1() //添加数据函数定义 { people::AddData(); //调用基类的显示函数 cout<<"请输入学号: "; cin>>studentnumber; cout<<"请输入专业: "; cin>>major; cout<<"请输入语文,数学,英语的成绩: "; for(int i=0;i<3;i++) cin>>basesore[i]; cout<<"请输入选修课: "; cin>>electiveslesson; cout<<"请输入选修课成绩: "; cin>>electivessore; cout<<"数据添加成功!!!"<<endl; } void Student::DeleteData(int k) //删除数据函数定义 { if(studentnumber==k) { studentnumber=0; //令学号为0来表示删除 y=0; //判断因子 cout<<"数据删除成功!!!"<<endl; } if(x==num1-1 && y==1) //通过判断因子和数组界限来判断 cout<<"无此学号数据,删除失败!!!"<<endl; } void Student::UpdataData(int k) //数据修改函数定义 { int i; if(k==studentnumber) //判断数据输入是否存在 { cout<<"原始的语文,数学,英语,选修课成绩分别为: "; for(i=0;i<3;i++) cout<<basesore[i]<<" "; cout<<electivessore<<endl; cout<<"请输入修改的后的语文,数学,英语,选修课成绩分别为: "; for(i=0;i<3;i++) cin>>basesore[i]; cin>>electivessore; y=0; cout<<"数据修改成功!!!"<<endl; } if(x==num1-1 && y==1) //通过判断因子和数组界限来判断 cout<<"无此学号数据,修改失败!!!"<<endl; } void Student::SearchData(long int studentnumber1,string name1,string sex1) //查询函数定义 { if(studentnumber1==studentnumber && name1==name && sex1==sex) { DisplayData1(); y=0; //判断因子 cout<<"查询成功!!!"<<endl; } if(x==num1-1 && y==1) cout<<"查询失败,无此数据!!!"<<endl; } void Student::DisplayData1() //数据显示函数定义 { cout<<"\t\t\t********学生数据显示********"<<endl; people::DisplayData(); cout<<"学号\t\t"<<"专业\t\t"<<"语文\t"<<"数学\t"<<"英语\t"<<"选修课\t "<<"选修课成绩"<<endl; cout<<studentnumber<<"\t"<<major<<"\t\t"; for(int i=0;i<3;i++) cout<<basesore[i]<<"\t "; cout<<electiveslesson<<"\t\t"<<electivessore<<endl;][/code]
  • 打赏
  • 举报
回复
好吧,我上代码 求帮忙改下bug
rocktyt 2013-07-03
  • 打赏
  • 举报
回复
引用 5 楼 rocktyt2 的回复:
[quote=引用 4 楼 lin157410764 的回复:] 左边的是打印出来的 右边的是输入去的 输入的中间只要有空格 下一个输入就没办法输入咯
没明白我的问题? 打印的那些字的代码呢?既然你能打印一行字再读入一行字,这两句代码肯定写在一起的啊,你截的这段代码只有读入,应该不是右图对应的代码吧?[/quote]换句话说就是 上全代码
rocktyt 2013-07-03
  • 打赏
  • 举报
回复
引用 4 楼 lin157410764 的回复:
左边的是打印出来的 右边的是输入去的 输入的中间只要有空格 下一个输入就没办法输入咯
没明白我的问题? 打印的那些字的代码呢?既然你能打印一行字再读入一行字,这两句代码肯定写在一起的啊,你截的这段代码只有读入,应该不是右图对应的代码吧?
  • 打赏
  • 举报
回复
左边的是打印出来的 右边的是输入去的 输入的中间只要有空格 下一个输入就没办法输入咯
rocktyt 2013-07-03
  • 打赏
  • 举报
回复
你两个图是对应的?右边那些输出文字呢?左边没看到啊
赵4老师 2013-07-03
  • 打赏
  • 举报
回复
摒弃istream;使用fscanf
char name[20];
fscanf(f,"%19[^\n\t,]",name);name[19]=0;
  • 打赏
  • 举报
回复
那个是我自己写的u重载函数 可是还是不可以啊 中间有隔空号下一个就不行咯 求大神指教啊

64,676

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

试试用AI创作助手写篇文章吧