protected:
intj;
};
classDERIVED:
publicBASE1,publicBASE2
{public:
voidset(intx,inty)
{i=x;j=y;}
};
intmain(intargc,char*argv[])
{DERIVEDobj;
obj.set(5,7);
obj.show_i();
obj.show_j();
return0;
}
3、有一个图书馆类,内有数据成员“借书卡号”和“书名”;还有一个学生类,内有数据成员“姓名”。
试设计一个读者类,它是图书馆类和学生类的派生类,继承了它们的所有数据成员和成员函数,在此基础上要添加一个查找函数,可根据输入的读者姓名,显示出该读者的相关信息。
程序设计:
(1)定义一个图书馆类Library,其主要功能是记录读者的借书卡号和书名。
(2)定义一个学生类Student,它的主要作用是记录读者的姓名。
(3)定义一个通过读者类Reader,它是Library和Student的派生类,它除了继承这两个类的数据成员,还定义自己的数据成员,通过该类可以了解到读者的上述所有信息,还记录了读者的借还书日期。
3个类的关系如图所示。
Library类
Student类
CharCard
CharBook
CharName
voidSetLib()
voidDispLib()
voidSetStu()
voidDispStu()
Reader类
Chardatabuf(9)
IntDate1(3)
Intdate2(3)
VoidSstBor()
IntFind()
VoidDisplay()
4、虚函数的简单使用。
#include
classbase
{public:
virtualvoidfh(){cout«"Inbaseclass\n";}
};
classsubclass:
publicbase
{public:
virtualvoidfn(){cout«"Insubclass\n";}
};
voidtest(base&b)
{b.fn();}
voidmain()
{basebe;
subclasssc;
cout«"Callingtest(bc)\n";
test(bc);
cout«"Callingtest(sc)\n";
test(sc);
}
5、用抽象类实现的菜单程序。
#include
classMenu
{public:
virtualvoidaction()=0;
};
classitem1:
publicMenu
{public:
virtualvoidaction()
{cout«"新建文件"«endl;}
};
classitem2:
publicMenu
{public:
virtualvoidaction()
{cout«"打开文件"«endl;}
};
classitem3:
publicMenu
{public:
virtualvoidaction()
{cout«"保存文件"«endl;}
};
classitem4:
publicMenu
{public:
virtualvoidaction()
{cout«关闭文件"«endl;}
};
voidmain()
{intselect;
Menu*Fptr[4];
Fptr[O]=newitem1;
Fptr[1]=newitem2;
Fptr[2]=newitem3;
Fptr[3]=newitem4;
Do
{cout«"1newfile"«endl;
cout«"2openfile"«endl;
cout«"3savefile"«endl;
cout«"4closefile"«endl;
cout«"Oexit"«endl;
cin》select;
if(select>=1&&select<=4)Fptr[select-1]->action();
}while(select!
=0);
for(inti=0;i<=3;i++)
{deleteFptr[i];}
6、定义一个从正方形、球体和圆柱体的各种运算中抽象出一个公共基container类,在其中定义表面积和体积的纯虚函数,在抽象类中定义一个公共的成员数据radius,此数据可作为球体的半径,正方形的边长,圆柱体的底面的半径。
分析:
定义一个派生于container类的正方体类cube,在类中都具有求表面积的和体积的重定义的成员函数。
定义一个派生于container类的球体类sphere,在类中都具有求表面积和体积的重定义的成员函数。
定义一个派生于container类的圆柱体类cylinder,在类中都具有求表面积和体积的重定义的成员函数。
7、编写一个人员信息管理系统。
这个系统的功能是:
交互式的实现校园人员信息的录入与显示。
分析:
学校里,主要有四类人员:
大学本科学生、教师、研究生和助教。
大学本科生每周有固定的学时数。
教师除了固定的学时数外,还有每周的教学时数。
研究生除了固定的学时数外,每周还可以自由做一定的研究。
助教生除了上课外,还要做研究和一定的教学工作。
人员的基本信息包括姓名、编号、性别、身份证号、总学时数以及每周固定学时数。
各个人员之间的关系:
people类派生出student类和teacher类,student类派生出graduate类,graduate类和teacher类派生出TA类。
以下给出部分程序:
#include
classpeople
{public:
//添加程序
private:
};
classstudent:
virtualpublicpeople
{public:
//添加程序
private:
};
classteacher:
virtualpublicpeople
{public:
//添加程序
private:
};
classgraduate:
virtualpublicstudent
{public:
//添加程序
private:
};
classTA:
publicpeoplestudent,publicteacher
{public:
//添加程序
private:
};
voidmain()
{//添加程序}
四、实验过程原始数据记录
/*
有一个图书馆类,内有数据成员“借书卡号”和“书名”;还有一个学生类,内有数据成员“姓名”。
试设计一个读者类,它是图书馆类和学生类的派生类,
继承了它们的所有数据成员和成员函数,在此基础上要添加一个查找函数,可根据输入的读者姓名,显示出该读者的相关信息。
程序设计:
(1)定义一个图书馆类Library,其主要功能是记录读者的借书卡号和书名。
(2)定义一个学生类Student,它的主要作用是记录读者的姓名。
(3)定义一个通过读者类Reader,它是Library和Student的派生类,它除了继承这两个类的数据成员,还定义自己的数据成员,
通过该类可以了解到读者的上述所有信息,还记录了读者的借还书日期。
*/
#include
usingnamespacestd;
classLibrary
{
public:
intcardno;
charbookname[30];
Library(intc,char*b){strcpy_s(bookname,b);cardno=c;}
};
classStudent
{
public:
charreadername[30];
Student(char*r){strcpy_s(readername,r);}
};
classReader:
publicLibrary,publicStudent
{
public:
charreturndate[30];
Reader(char*rd):
Library(2,"中华经典诵读"),Student("小明")
{strcpy_s(returndate,rd);}
friendvoidprint();
friendReaderoperator<<(constostream&out,constReader&ri);
};
Readeroperator<<(ostream&out,Reader&ri)
{
out<returnri;
}
voidprint(Reader&ri)
{
cout<}
voidmain()
{
Readerr1("12月1日");
print(r1);
}
/*6、定义一个从正方形、球体和圆柱体的各种运算中抽象出一个公共基container类,在其中定义表面积和体积的纯虚函数,
在抽象类中定义一个公共的成员数据radius,此数据可作为球体的半径,正方形的边长,圆柱体的底面的半径。
分析:
定义一个派生于container类的正方体类cube,在类中都具有求表面积的和体积的重定义的成员函数。
定义一个派生于container类的球体类sphere,在类中都具有求表面积和体积的重定义的成员函数。
定义一个派生于container类的圆柱体类cylinder,在类中都具有求表面积和体积的重定义的成员函数。
*/
#include
usingnamespacestd;
classcontainer
{
public:
virtualvoidsurfacearea()const=0;
virtualvoidvolume()const=0;
voidgetvalues(doubler){radius=r;}
voidgetvalues(doubler,doubleh){radius=r;height=h;}
doubleradius;
doubleheight;
};
classcube:
publiccontainer
{
public:
voidsurfacearea()const
{
cout<<"正方形面积:
"<}
voidvolume()const
{
cout<<"正方形体积:
"<}
};
classsphere:
publiccontainer
{
public:
voidsurfacearea()const
{
cout<<"球体面积:
"<}
voidvolume()const
{
cout<<"球体体积:
"<<4/3*3.1415926*radius*radius*radius<}
};
classcylinder:
publiccontainer
{
public:
voidsurfacearea()const
{
cout<<"圆柱体面积:
"<}
voidvolume()const
{
cout<<"圆柱体体积:
"<<3.1415926*radius*radius*height<}
};
voidmain()
{
doubler1;
doubleh1;
cubec;
spheres;
cylindercy;
cout<<"请输入半径(或长)"<cin>>r1;
cout<<"请输入高"<cin>>h1;
c.getvalues(r1);
c.surfacearea();
c.volume();
s.getvalues(r1);
s.surfacearea();
s.volume();
cy.getvalues(r1,h1);
cy.surfacearea();
cy.volume();
}
/*编写一个人员信息管理系统。
这个系统的功能是:
交互式的实现校园人员信息的录入与显示。
分析:
学校里,主要有四类人员:
大学本科学生、教师、研究生和助教。
大学本科生每周有固定的学时数。
教师除了固定的学时数外,还有每周的教学时数。
研究生除了固定的学时数外,每周还可以自由做一定的研究。
助教生除了上课外,还要做研究和一定的教学工作。
人员的基本信息包括姓名、编号、性别、身份证号、总学时数以及每周固定学时数。
各个人员之间的关系:
people类派生出student类和teacher类,student类派生出graduate类,graduate类和teacher类派生出TA类。
*/
#include
usingnamespacestd;
classpeople
{
public:
charname[30];
charno[30];
charsex[30];
charcardno[30];
inttotalhours;
inthourspw;
/*people(char*n,char*nno,char*s,char*c,intt,inth)
{
strcpy_s(name,n);strcpy_s(no,nno);strcpy_s(sex,s);strcpy_s(cardno,c);totalhours=t;hourspw=h;
}*/
people(){}
};
classstudent:
virtualpublicpeople
{
public:
friendstudentoperator>>(istream&in,student&s)
{
cout<<"请依次输入大学本科生姓名,学号,性别,身份证号,总学时数,每周固定学时数"<in>>s.name;in>>s.no;in>>s.sex;in>>s.cardno;in>>s.totalhours;in>>s.hourspw;
returns;
}
friendstudentoperator<<(ostream&out,student&s)
{
cout<<"大学本科生:
"<<"学号";out<cout<<"性别";out<cout<<"身份证号";out<cout<<"总学时数";out<cout<<"每周固定学时数";out<returns;
}
};
classteacher:
virtualpublicpeople
{
public:
intteachhours;
friendteacheroperator>>(istream&in,teacher&t)
{
cout<<"请依次输入教师姓名,号码,性别,身份证号,总学时数,每周固定学时数,每周教学时数"<in>>t.name;in>>t.no;in>>t.sex;in>>t.cardno;in>>t.totalhours;in>>t.hourspw;in>>t.teachhours;
returnt;
}
friendteacheroperator<<(ostream&out,teacher&t)
{
cout<<"教师:
"<<"号码";out<cout<<"性别";out<cout<<"身份证号";out<