}
};
voidmain()
{jpicturea(1,2);
sanjiaoxingb(3,4);
a.area();
b.area();
}
2.实验结果:
jpicture'sarea:
2
sanjiaoxing'sarea:
6
Pressanykeytocontinue
2.3多继承和虚基类
1)分析下面的程序,指出程序运行的结果:
#include
classCBase1
{
intx;
public:
CBase1()
{x=0;cout<<"调用构造函数CBase1()!
\n";}
CBase1(inta)
{x=1;cout<<"调用构造函数CBase1(int)!
\n";}
~CBase1(){cout<<"调用析构函数~CBase1()!
\n";}
};
classCBase2
{inty;
public:
CBase2()
{y=0;cout<<"调用构造函数CBase2()!
\n";}
CBase2(inta)
{y=a;cout<<"调用构造函数CBase2(int)!
\n";}
~CBase2(){cout<<"调用析构函数~CBase2()!
\n";}
};
classA
{intx;
public:
A(){x=0;cout<<"调用构造函数A()!
\n";}
A(inta){x=a;cout<<"调用构造函数A(int)!
\n";}
~A(){cout<<"调用析构函数~A()!
\n";}
};
classCDerived:
publicCBase1,virtualpublicCBase2
{
Aa;
public:
CDerived()
{cout<<"调用构造函数CDerived()!
\n";}
CDerived(intx,inty,intz):
a(x),CBase1(y),CBase2(z)
{cout<<"调用构造函数CDerived(int,int,int)!
\n";}
~CDerived(){cout<<"调用析构函数~CDerived()!
\n";}
};
voidmain()
{
CDerived*x=newCDerived;
CDerivedy(2,3,4);
deletex;
cout<<"main()函数结束!
\n";
}
实验结果:
调用构造函数CBase2()!
调用构造函数CBase1()!
调用构造函数A()!
调用构造函数CDerived()!
调用构造函数CBase2(int)!
调用构造函数CBase1(int)!
调用构造函数A(int)!
调用构造函数CDerived(int,int,int)!
调用析构函数~CDerived()!
调用析构函数~A()!
调用析构函数~CBase1()!
调用析构函数~CBase2()!
main()函数结束!
调用析构函数~CDerived()!
调用析构函数~A()!
调用析构函数~CBase1()!
调用析构函数~CBase2()!
Pressanykeytocontinue
编写并调试程序
1)p196习题4.21
#include
usingnamespacestd;
classTime{
public:
Time(inth,intm,ints)
{hours=h;minutes=m;seconds=s;}
voiddisplay()
{cout<<"出生时间:
"<}
protected:
inthours,minutes,seconds;
};
classDate{
public:
Date(intM,intd,inty)
{month=M;day=d;year=y;
}
voiddisplay()
{cout<<"出生年月:
"<}
protected:
intmonth,year,day;
};
classBirthtime:
publicTime,publicDate{
char*Childname;
public:
Birthtime(char*Childname1,inth,intm,ints,intM,intd,inty):
Time(h,m,s),Date(M,d,y)
{Childname=newchar[strlen(Childname1)+1];
strcpy(Childname,Childname1);}
~Birthtime()
{delete[]Childname;}
voiddisplay()
{cout<<"Childname:
"<Time:
:
display();
Date:
:
display();
}
};
voidmain()
{
Birthtimeb("xiaoming",18,37,28,6,30,1992);
b.display();
}
实验结果:
Childname:
xiaoming
出生时间:
18时37分28秒
出生年月:
1992年6月30日
Pressanykeytocontinue
2)定义一个人员类cpeople,其属性有(保护类型):
姓名、性别、年龄;从中派生出学生类cstudent,添加属性:
学号、入学时间和入学成绩;从cpeople类再派生出教师类cteacher,添加属性:
职务、部门、工作时间;有cstudent类派生研究生类cgraduate,添加属性:
研究方向和导师,由cgraduate和cteacher共同派生出在职研究生类cgradonwork,分别定义其中的构造函数和输出函数。
主函数中定义各种类的对象,并完成测试。
1.程序设计如下:
#include
#include
usingnamespacestd;
classcpeople{
protected:
stringname;
charsex;
intage;
public:
cpeople(stringname1,charsex1,intage1)
{name=name1;sex=sex1;age=age1;}
voidprint()
{cout<<"name:
"<cout<<"sex:
"<cout<<"age:
"<}
};
classcstudent:
virtualpubliccpeople{
protected:
stringnum;
intyear,month,day;
doublee_score;
public:
cstudent(stringname1,charsex1,intage1,stringnum1,intyear1,intmonth1,intday1,doublee_score1):
cpeople(name1,sex1,age1)
{num=num1;year=year1;month=month1;day=day1;e_score=e_score1;}
voidprint()
{cpeople:
:
print();
cout<<"num:
"<cout<<"Entertime:
";
cout<cout<<"Enterscore:
"<}
};
classcteacher:
virtualpubliccpeople{
protected:
stringtitle;
stringdept;
intw_time;
public:
cteacher(stringname1,charsex1,intage1,stringtitle1,stringdept1,intw_time1):
cpeople(name1,sex1,age1)
{title=title1;dept=dept1;w_time=w_time1;}
voidprint()
{cpeople:
:
print();
cout<<"title:
"<
cout<<"dept:
"<cout<<"w_time:
"<}
};
classcgraduate:
publiccstudent{
protected:
stringmajor;
stringm_teacher;
public:
cgraduate(stringname1,charsex1,intage1,stringnum1,intyear1,intmonth1,intday1,doublee_score1,
stringmajor1,stringm_teacher1):
cpeople(name1,sex1,age1),cstudent(name1,sex1,age1,num1,year1,month1,day1,e_score1)
{major=major1;m_teacher=m_teacher1;}
voidprint()
{cstudent:
:
print();
cout<<"major:
"<cout<<"m_teacher:
"<}
};
classcgradonwork:
publiccgraduate,publiccteacher{
public:
cgradonwork(stringname1,charsex1,intage1,stringnum1,intyear1,intmonth1,intday1,doublee_score1,
stringmajor1,stringm_teacher1,stringtitle1,stringdept1,intw_time1):
cpeople(name1,sex1,age1),cgraduate(name1,sex1,age1,
num1,year1,month1,day1,e_score1,major1,m_teacher1),cteacher(name1,sex1,age1,title1,dept1,w_time1)
{}
voidprint()
{cgraduate:
:
print();
cout<<"dept:
"<cout<<"title:
"<
cout<<"w_time:
"<}
};
voidmain()
{
cpeoplec1("南宫",'m',24);
cout<<"People:
"<c1.print();
cstudentc2("蓝莎",'f',20,"11084521",1991,5,23,92);
cout<<"Student:
"<c2.print();
cteacherc3("金秀炫",'m',31,"博士","化工",25);
cout<<"Teacher:
"<c3.print();
cgraduatec4("布莱德利詹姆斯",'m',24,"11552555",1992,5,7,97,"jisuanji","苏志燮");
cout<<"Graduate:
"<c4.print();
cgradonworkc5("崔智友",'f',23,"12553515",1992,6,25,91,"计算机","李胜基","网络管理员","计通学院",7);
cout<<"Gradonwork:
"<c5.print();
}
2.实验结果:
People:
name:
南宫
sex:
m
age:
24
Student:
name:
蓝莎
sex:
f
age:
20
num:
11084521
Entertime:
5\23\1991
Enterscore:
92
Teacher:
name:
金秀炫
sex:
m
age:
31
title:
博士
dept:
化工
w_time:
25
Graduate:
name:
布莱德利詹姆斯
sex:
m
age:
24
num:
11552555
Entertime:
5\7\1992
Enterscore:
97
major:
m_teacher:
苏志燮
Gradonwork:
name:
崔智友
sex:
f
age:
23
num:
12553515
Entertime:
6\25\1992
Enterscore:
91
major:
m_teacher:
李胜基
dept:
计通学院
title:
网络管理员
w_time:
7
Pressanykeytocontinue
3、实验结论: