|
网站首页
|
业界新闻
|
小组
|
威客
|
人才
|
下载频道
|
博客
|
代码贴
|
在线编程
|
编程论坛
|
登录
注册
短消息
我发表的主题
我参与的主题
我收藏的贴子
我上传的附件
我下过的附件
编辑个人资料
我的博客
用户控制面板
搜索
道具
恢复默认风格
碧海青天
秋意盎然
棕红预览
粉色回忆
蓝雅绿
紫色淡雅
青青河草
e点小镇
橘子红了
红红夜思
水晶紫色
雪花飘飘
新年快乐
风格
短消息
论坛展区
帮助
编程论坛
→
开发语言
→
C++论坛
→
『 C++教室 』
→ 程序的疑问,请大家解疑
我的收件箱(0)
欢迎加入我们,一同切磋技术
用户名:
密 码:
共有
579
人关注过本帖
标题:
程序的疑问,请大家解疑
只看楼主
加入收藏
上山打老鼠
等 级:
新手上路
帖 子: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
举报帖子
使用道具
赠送鲜花
柳儿
等 级:
贵宾
威 望:
25
帖 子:1830
专家分:30
注 册:2004-9-23
第
2
楼
收藏
得分:0
那个不是头文件,template<class T> class List 这个是类模板。详细看C++书。
第40行是重载运算符,重载“>>”,用于输出
成功会使人骄傲。如果你骄傲自大,你就会停止学习。不学习,人就停止了进步
2006-01-13 11:24
举报帖子
使用道具
赠送鲜花
上山打老鼠
等 级:
新手上路
帖 子:3
专家分:0
注 册:2006-1-13
第
3
楼
收藏
得分:0
哦,非常感谢~~
2006-01-13 11:32
举报帖子
使用道具
赠送鲜花
柳儿
等 级:
贵宾
威 望:
25
帖 子:1830
专家分:30
注 册:2004-9-23
第
4
楼
收藏
得分:0
以下是引用
柳儿
在2006-1-13 11:24:00的发言:
那个不是头文件,template<class T> class List 这个是类模板。详细看C++书。
第40行是重载运算符,重载“>>”,用于输出
不好意思,是
输入
,不是
输出
。
成功会使人骄傲。如果你骄傲自大,你就会停止学习。不学习,人就停止了进步
2006-01-13 11:56
举报帖子
使用道具
赠送鲜花
上山打老鼠
等 级:
新手上路
帖 子:3
专家分:0
注 册:2006-1-13
第
5
楼
收藏
得分: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
等 级:
新手上路
帖 子:85
专家分:0
注 册:2005-12-29
第
6
楼
收藏
得分:0
operator +(a, b) = a+b
operator >>(a,b) = a>>b
同里operator -(a, b)
....
灌水无罪! 顶贴有理! <0_0>
2006-01-13 21:20
举报帖子
使用道具
赠送鲜花
6
1/1页
1
快速回复:
程序的疑问,请大家解疑
数据加载中...
关于我们
|
广告合作
|
编程中国
|
清除Cookies
|
TOP
|
手机版
编程中国
版权所有,并保留所有权利。
Powered by
Discuz
, Processed in 0.024698 second(s), 7 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved