| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 579 人关注过本帖
标题:程序的疑问,请大家解疑
只看楼主 加入收藏
上山打老鼠
Rank: 1
等 级:新手上路
帖 子:3
专家分:0
注 册:2006-1-13
收藏
 问题点数:0 回复次数:5 
程序的疑问,请大家解疑
请大家看看这个程序
 
这是一个菜单,实现插入、删除、修改和输出等操作。
有几个弱弱的问题要请教大家,程序如下:
#include <iostream.h>
#include <string.h>
template<class T>
class List
{protected:
T *first;//链表头指针
public:
List(){first=NULL;}
void Insert(T &elem) //表头插入
{ if(first==NULL) //若表为空
{first=&elem;elem.next=NULL;}
else
{elem.next=first;first=&elem;}
}
void Dle(int Jd) //删除结点
{ T *p;
if(first==NULL) return;//表为空
if(first->key()== Jd)//删除头结点
{T *x=first; x->print(); first=first->next; delete x;}
else //不是头结点
{for(T *q=first;q->next!=NULL;q=q->next)
if(q->next->key()==Jd)
{T *x=q->next; x->print(); p=q->next; q->next=p->next;
delete x;
return;}
}
}
void Print()
{ for(T *p=first;p;p=p->next)
{ p->print(); cout<<endl;}
}
};
class type_base
{protected:
int number;
char name[15],sex[4],data_of_birthday[12];
public:
type_base *next;
virtual void print(); //运算符重载
virtual istream& operator>>(istream &dest);
int key()
{return number;}
};
istream & type_base::operator>>(istream &dest)
{ cout<<"请输入学号,姓名,性别,出生日期"<<endl;
dest>>number>>name>>sex>>data_of_birthday;
return dest;
}
void type_base::print( )
{ cout<<"调用基类的输出。";
cout<<number<<name<<sex<<data_of_birthday;
}
class student:public type_base
{protected:
double goal;
public:
istream & operator>>(istream &dest);
void print()
{ cout<<"学生:";
cout<<"("<<number<<" "<<name<<" "<<sex<<" "<<data_of_birthday<<" "<<")"<<endl;
}
};
istream & student::operator>>(istream &dest)
{ cout<<"请输入学号,姓名,性别,出生日期:"<<endl;
dest>>number>>name>>sex>>data_of_birthday;
return dest;
}
class staff:public type_base
{protected:
char office[20];
public:
istream & operator>>(istream &dest);
void print()
{cout<<"员工:";
cout<<"("<<number<<" "<<name<<" "<<sex<<" "<<data_of_birthday<<" "<<")"<<endl;
}
};
istream & staff::operator>>(istream &dest)
{cout<<"请输入员工号,姓名,性别,出生日期:"<<endl;
dest>>number>>name>>sex>>data_of_birthday;
return dest;
}
class teacher:public type_base
{protected:
double fund;
public:
istream & operator>>(istream &dest);
void print()
{cout<<"老师:";
cout<<"("<<number<<" "<<name<<" "<<sex<<" "<<data_of_birthday<<" "<<")"<<endl;
}
};
istream & teacher::operator>>(istream &dest)
{ cout<<"请输入员工号,姓名,性别,出生日期:"<<endl;
dest>>number>>name>>sex>>data_of_birthday;
return dest;
}
void display1()
{ cout<<"\n(1) 增加数据.\n";
cout<<"(2) 删除数据.\n";
cout<<"(3) 显示数据.\n";
cout<<"(4) 结束.\n";
cout<<"请选择...";
}
void display2()
{ cout<<"1.学生.\n";
cout<<"2.职工.\n";
cout<<"3.教师.\n";
}
void main()
{ List<type_base> list;
int ch;
while(ch!=4)
{ display1();
cin>>ch;
if(ch==1)
{int ah; display2(); cin>>ah;
if(ah==1)
{student *p=new student;
(*p)>>cin;
list.Insert(*p);
list.Print();
}
else if(ah==2)
{staff *p=new staff;
(*p)>>cin;
list.Insert(*p);
list.Print();
}
else
{teacher *p=new teacher;
(*p)>>cin;
list.Insert(*p);
list.Print();
}
}
else if(ch==2)
{int ax;
cout<<"输入要删除的编号:";
cin>>ax;
cout<<endl;
list.Dle(ax);
cout<<"删除后为:\n";
list.Print();
}
else if(ch==3) list.Print();
}
}
问题也补上,头文件里的template<class T>是什么意思?
还有第39行的注释哪个是重载运算符?执行了什么重载运算?
那一个模块有什么作用?还有下面的
istream & type_base::operator>>(istream &dest)
{ cout<<"请输入学号,姓名,性别,出生日期"<<endl;
dest>>number>>name>>sex>>data_of_birthday;
return dest;
又有什么作用?请大家指教!不胜感激!!
搜索更多相关主题的帖子: 解疑 疑问 
2006-01-13 11:13
柳儿
Rank: 6Rank: 6
等 级:贵宾
威 望:25
帖 子:1830
专家分:30
注 册:2004-9-23
收藏
得分:0 
那个不是头文件,template<class T> class List 这个是类模板。详细看C++书。
第40行是重载运算符,重载“>>”,用于输出


成功会使人骄傲。如果你骄傲自大,你就会停止学习。不学习,人就停止了进步
2006-01-13 11:24
上山打老鼠
Rank: 1
等 级:新手上路
帖 子:3
专家分:0
注 册:2006-1-13
收藏
得分:0 
哦,非常感谢~~
2006-01-13 11:32
柳儿
Rank: 6Rank: 6
等 级:贵宾
威 望:25
帖 子:1830
专家分:30
注 册:2004-9-23
收藏
得分:0 
以下是引用柳儿在2006-1-13 11:24:00的发言:
那个不是头文件,template<class T> class List 这个是类模板。详细看C++书。
第40行是重载运算符,重载“>>”,用于输出

不好意思,是输入,不是输出


成功会使人骄傲。如果你骄傲自大,你就会停止学习。不学习,人就停止了进步
2006-01-13 11:56
上山打老鼠
Rank: 1
等 级:新手上路
帖 子:3
专家分:0
注 册:2006-1-13
收藏
得分:0 
可是我觉得

class type_base
{protected:
int number;
char name[15],sex[4],data_of_birthday[12];
public:
type_base *next;
virtual void print(); //运算符重载
virtual istream& operator>>(istream &dest);
int key()
{return number;}
};

这里不叫运算符重载,而是虚函数,virtual的意思是代表继承类可以实现自己的函数体.

staff中就实现了相同名字的print

class staff:public type_base
{protected:
char office[20];
public:
istream & operator>>(istream &dest);
void print()
{cout<<"员工:";
cout<<"("<<number<<" "<<name<<" "<<sex<<" "<<data_of_birthday<<" "<<")"<<endl;
}
};




istream & type_base::operator>>(istream &dest)

才是重载操作符:">>"
(是这样么?)


啊啊啊,头大。。。。
2006-01-13 15:18
love_me
Rank: 1
等 级:新手上路
帖 子:85
专家分:0
注 册:2005-12-29
收藏
得分:0 

operator +(a, b) = a+b

operator >>(a,b) = a>>b

同里operator -(a, b)

....


灌水无罪! 顶贴有理! <0_0>
2006-01-13 21:20
快速回复:程序的疑问,请大家解疑
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.022301 second(s), 9 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved