实验4文档格式.docx
《实验4文档格式.docx》由会员分享,可在线阅读,更多相关《实验4文档格式.docx(10页珍藏版)》请在冰点文库上搜索。
![实验4文档格式.docx](https://file1.bingdoc.com/fileroot1/2023-5/1/04afc46e-e2e1-4434-aa03-3c7c858dda23/04afc46e-e2e1-4434-aa03-3c7c858dda231.gif)
3、从CPerson类派生出CTeacher类,添加属性:
职务、部门和工作时间;
4、由CStudent类派生出CGraduate类,添加属性:
研究方向和导师;
5、由CGraduate和CTeacher共同派生出在职研究生类CGradonWork
6、对上述类分别定义其中的构造函数和输出函数,并在主函数中定义对象进行测试,测试的代码大致如下:
CGradonWorkgradonWork("
tzcer"
"
男"
33,"
15"
2003"
335,"
computer"
tangmin"
jsj"
sxxy"
2002-8"
);
gradonWork.Print();
其中CGradonWork的构造函数参数分别对应的属性是一个在职的研究生对象,其姓名为tzcer,性别为男,33岁,学号15,2003年读在职,入学成绩335,就读计算机方向,其导师tangmin,同时tzcer也是sxxy部门,jsj专业的老师,2002-8月入职。
要求记录输出信息并说明实验步骤和解决方法!
7、问题:
何为继承二义性,在本实验中哪个地方存在二义性,你是如何解决的?
三、上机过程原始记录(源程序等)
class
person{
char
Name[10];
Sex;
int
Age;
public:
person(char
*name,int
age,char
sex)
{
strcpy(Name,name);
Age=age;
Sex=(sex=='
m'
?
'
:
f'
}
virtual
void
set()
age;
name[10];
sex;
cout<
<
"
请输入姓名:
endl;
cin>
>
name;
请输入年龄:
请输入性别:
Sex=sex;
}
showinfo()
Name<
\t'
Age<
Sex<
endl<
system("
pause"
};
student:
public
person
{
number;
//定义学好
time;
//定义入学时间
float
score1;
//定义入学成绩
student(int
num,int
time,float
sco1,char
sex):
person(name,age,sex)
score1=sco1;
}
{
sco[3];
person:
set();
请输入学号:
;
number=number;
请输入入学时间:
time=time;
请输入入学成绩:
sco[0];
score1=sco[0];
number<
time<
score1<
teacher:
title[30];
//定义职称
dept[30];
//定义部门
length;
//定义工作时间
teacher(char
*tit,char
*de,int
len,char
*name,char
sex,int
age):
strcpy(title,tit);
strcpy(dept,de);
length=len;
tit[30];
de[30];
len;
//定义工作时间
职称:
tit;
部门:
de;
工作时间:
title<
dept<
length<
graduate:
student
RFields[30];
//定义研究方向
tutor[30];
//定义导师
graduate(char
*RF,char
*tu,int
*number,int
score1):
student(number,time,score1)
strcpy(RFields,RF);
strcpy(tutor,tu);
RF[30];
//定义研究方向
tu[30];
研究方向:
RF;
导师:
tu;
RFields<
tutor<
GradonWork:
Graduate,public
Teacher
CGradonWork
gradonWork("
其中CGradonWork
的构造函数参数分别对应的属性是一个在职的研究生对象,其姓名为tzcer,性别为男,33岁,学号15,2003年读在职,入学成绩335,就读计算机方向,其导师tangmin,同时tzcer也是sxxy部门,jsj专业的老师,2002-8月入职。
要求记录输出信息并说明实验步骤和解决方法!
主要代码:
#include<
iostream.h>
stdio.h>
string.h>
stdlib.h>
hhh()
1.基类基本情况:
2.老师类基本情况:
3.学生类基本情况:
0.退出"
请选择种类(0~3)"
请选择:
main()
person
*d[3];
per("
wenpiao"
20,'
student
stu(11290033,2011,523,"
teacher
tea("
jiaoshou"
dianxin"
20,"
chenxiaochang"
40,'
d[0]=&
per;
d[1]=&
stu;
d[2]=&
tea;
choice;
for(;
)
cls"
if
(choice>
=0&
&
choice<
=3)
switch
(choice)
case
1:
d[choice-1]->
showinfo();
break;
2:
{
d[choice]->
3:
d[choice-2]->
0:
exit(0);
}
else
错误输入!
请重新选择:
hhh();
运行记录:
一般说来,在派生类中对基类成员的访问应该是唯一的,但是,由
多继承情况下,可能造成对基类中某成员的访问出现了不唯一的情况,则称为对基类成员访问的二义性问题。
使用基类
A{
f();
B{
g();
C:
A,public
B;
h();
//这里派生类A和基类B中都有f(),基类B和基类C中都有g()
,所以访问出现二义
使用基类名为避免这种二义:
obj.A:
//A中的f()
obj.B:
//B中的f()
这种使用基类名来控制成员访问的规则称为支配原则
obj.g();
//隐含用C的g()
//用B的g()
四、上机结果及分析
1、
2、
3
.
4.