| 编程中国 | 业界新闻 | 技术文章 | 视频教程 | 下载频道 | 程序源码 | 个人空间 | 编程论坛
学习型 ASP/PHP/ASP.NET 主机 35元/年全能ASP/PHP/ASP.NET主机,支持月付专业 MSSQL 数据库空间,支持月付专业 MySQL 数据库空间,支持月付
赛孚耐:软件保护加密专家身份认证令牌USB KEY  
共有 363 人关注过本帖
标题:我的C++虚基类作业
收藏  订阅  推荐  打印 
神vLinux飘飘
Rank: 12Rank: 12Rank: 12
等级:贵宾
威望:87
帖子:6085
积分:61226
注册:2004-7-17
我的C++虚基类作业

设计一个基类people,然后派生出student类和teacher类。在图书馆管理系统中,reader(读者)既可以是老师,也可以是学生。请根据虚基类的知识设计people类,student类。teacher类和reader类。(student和teacher借书的时间长度不同)。以下是各类的成员:

People:name,age,setname(),setage(),getname(),getage()
student:id,setid(),getId()
teacher:id,setid(),getId()
Reader:month,tag,setMonth(),getMonth,setTag(),getTag(),showAll()
(注意:所有的数据成员都是Protected类型,方法为Public成员)
搜索更多相关主题的帖子: 基类  作业  
2007-6-3 19:47
神vLinux飘飘
Rank: 12Rank: 12Rank: 12
等级:贵宾
威望:87
帖子:6085
积分:61226
注册:2004-7-17

如果要我重新设计这个题目,我肯定不会 Reader : public Teacher, public Student这样去MI

这句让我十分疑惑:reader(读者)既可以是老师,也可以是学生。

读者只能是老师或者学生,两个状态只能是一种。但是如果按照MI这样去继承,那么Reader就可以同时处于两者状态了,就是说,读者可以同时扮演老师和学生两种角色。

这让我感到非常不安。大家认为呢?

泛出微微的蓝色的光,像有生命般涌动着,闪烁着,平滑而优美,达到了机械和美学结合的最高境界,向一件艺术品一样,默默的展示着,寂寞而孤傲,只有宇宙才能证实它的存在,只有永恒可以于它并存
2007-6-3 19:50
aipb2007
Rank: 12Rank: 12Rank: 12
来自:CQU
等级:贵宾
威望:40
帖子:2881
积分:29414
注册:2007-3-18

神,用不着不安,这正是多继承的好例子。
其实并没有你说的reader处于两种状态,只能说一个reader的对象同时具有了老师和学生的某些属性。
这样的继承是十分安全的,继承中的虚拟机制会很智能的处理不同的对象行为(动态绑定)。

Fight  to win  or  die...
2007-6-3 21:13
神vLinux飘飘
Rank: 12Rank: 12Rank: 12
等级:贵宾
威望:87
帖子:6085
积分:61226
注册:2004-7-17

Reader在创建的同时,会创建Teacher和Student这两个子对象,怎么能说只是具有了老师和学生的某些属性呢?

泛出微微的蓝色的光,像有生命般涌动着,闪烁着,平滑而优美,达到了机械和美学结合的最高境界,向一件艺术品一样,默默的展示着,寂寞而孤傲,只有宇宙才能证实它的存在,只有永恒可以于它并存
2007-6-4 14:33
wfpb
Rank: 12Rank: 12Rank: 12
等级:贵宾
威望:29
帖子:2188
积分:22230
注册:2006-4-2

lz可以这样试试:

程序代码:
template&lt;class T&gt;<BR>class Reader:public T<BR>{<BR>//...<BR>};

Reader<Teacher>teacher_reader;
就是老师读者...

[glow=255,red,2]wfpb的部落格[/glow] 学习成为生活的重要组成部分!
2007-6-4 14:58
aipb2007
Rank: 12Rank: 12Rank: 12
来自:CQU
等级:贵宾
威望:40
帖子:2881
积分:29414
注册:2007-3-18

创建两个子对象,又不是说就是学生和老师的组合体了。

我觉得你理解的是现实层面,我说的是抽象层面。语言的东西,只能这样想了。
非要你这样认为的话,大部分多继承都存在这个矛盾。

你说的也对,怎么说既是老师又是学生呢?呵呵。
但是如果放在一个具体的环境下去实例化,就程序而言我觉得不存在安全问题。


Fight  to win  or  die...
2007-6-4 15:02
wfpb
Rank: 12Rank: 12Rank: 12
等级:贵宾
威望:29
帖子:2188
积分:22230
注册:2006-4-2

也可以这样:

程序代码:

<br>class People<br>{<br>protected:<br> string name;<br> int age;<br>public:<br> virtual void setname(string n)<br> {<br> name=n;<br> }<br> virtual void setage(int a)<br> {<br> age=a;<br> }<br> virtual string getname()<br> {<br> return name;<br> }<br> virtual int getage()<br> {<br> return age;<br> }<br>};<br>class EduPerson:public People<br>{<br>protected:<br> int id;<br>public:<br> virtual void setid(int i)=0;<br> virtual int getid()=0;<br>};<br>class Student:public EduPerson<br>{<br>public:<br> virtual void setid(int i)<br> {<br> id=i;<br> }<br> virtual int getid()<br> {<br> return id;<br> }<br>};</P> <P>class Teacher:public EduPerson<br>{<br>public:<br> virtual void setid(int i)<br> {<br> id=i;<br> }<br> virtual int getid()<br> {<br> return id;<br> }<br>};</P> <P>class Reader<br>{<br> int month,tag;<br> EduPerson* pReader;<br> bool m_bStu;<br>public:<br> Reader(bool bstu=true)<br> {<br> m_bStu=bstu;<br> if(bstu)<br> pReader=new Student;<br> else<br> pReader=new Teacher;<br> }<br> ~Reader()<br> {<br> delete pReader;<br> }<br> void setid(int i)<br> {<br> pReader-&gt;setid(i);<br> }<br> int getid()<br> {<br> return pReader-&gt;getid();<br> }<br> void setMonth(int m)<br> {<br> month=m;<br> }<br> int getMonth()<br> {<br> return month;<br> }<br> void setTag(int t)<br> {<br> tag=t;<br> }<br> int getTag()<br> {<br> return tag;<br> }<br> void showAll()<br> {<br> printf("%s---,Month:%d,Tag:%d\n",m_bStu?"Students":"Teacher",month,tag);<br> }<br>};<br>void DevideTest()<br>{<br> Reader tr;<br> tr.setid(3);<br> tr.setMonth(2);<br> tr.setTag(1);<br> tr.showAll();<br>}<br>void main()<br>{<br> DevideTest();<br>}

[此贴子已经被作者于2007-6-4 15:28:06编辑过]


[glow=255,red,2]wfpb的部落格[/glow] 学习成为生活的重要组成部分!
2007-6-4 15:27
aipb2007
Rank: 12Rank: 12Rank: 12
来自:CQU
等级:贵宾
威望:40
帖子:2881
积分:29414
注册:2007-3-18

LS的方法很好
不过无论是哪个方法,都要根据判断学生还是老师这点,再根据不同使用不同的方法。
同时就楼主最先那个题目,要设计一个继承体系的话,你这样做也偏离本意了啊。
单就完成这个题目说,我觉得最初那个设计完全没有问题。唯一的感觉不和谐就是“读者”同时创建了“老师”和“学生”两个子对象,这点按实际来说,有点迷惑。

继续关注下!

Fight  to win  or  die...
2007-6-4 19:48
关于我们 | 广告合作 | 编程中国 | 清除Cookies | Archiver | WAP | TOP

编程中国 版权所有,并保留所有权利。鲁ICP备08000592号
Powered by Discuz, Processed in 0.107186 second(s), 9 queries.
Copyright©2004-2008, BCCN.NET, All Rights Reserved