您好,欢迎访问三七文档
当前位置:首页 > 商业/管理/HR > 其它文档 > 实验三-派生类与继承
实验三派生类与继承一、实验目的1、学习类的继承,能够定义和使用类的继承关系。2、学习派生类的声明与定义方法。3、掌握类的定义和对象的声明。4、熟悉公有派生和私有派生的访问特性。5、掌握派生类构造函数和析构函数的执行顺序。6、掌握利用访问声明调整基类成员在派生类中的访问属性。二、试验内容1、下面的程序可以输出ASCII字符与所对应的数字的对照表。修改下列程序,使其可以输出字母a到z(或任意两个字符间)与所对应的数字的对照表。classtable{public:table(intp){i=p;}voidascii(void);protected:inti;};voidtable::ascii(void){intk=1;for(;i127;i++){coutsetw(4)i(char)i;if((k)%12==0)cout\n;k++;}cout\n;}classder_table:publictable{public:der_table(intp,char*m):table(p){c=m;}voidprint(void);protected:char*c;};voidder_table::print(void){coutc\n;table::ascii();}intmain(){der_tableobl(32,ASCIIvalue---char);obl.print();return0;}提示:修改后的主程序为:intmain(){der_tableob('a','z',ASCIIvalue---char);ob.print();return0;}#includeiostream.hclasstable{public:table(intp){i=p;}voidascii(void);protected:inti;};voidtable::ascii(void){intk=1;for(;i123;i++){couti(char)i;if((k)%12==0)coutendl;k++;}coutendl;}classder_table:publictable{public:der_table(intp,char*m):table(p){c=m;}voidprint(void);protected:char*c;};voidder_table::print(void){coutcendl;table::ascii();}intmain(){der_tableob('a',ASCIIvalue---char);ob.print();return0;}2、已有类Time和Date,要求设计一个派生类Birthtime,它继承类Time和Date,并且增加一个数据成员Childname用于表示小孩的名字,同事设计主程序显示一个小孩的出生时间和名字。#includeiostream.h#includestring.hclassTime{public:Time(inth,intm,ints){hours=h;minutes=m;seconds=s;}voiddisplay(){cout出生时间:hours时minutes分seconds秒endl;}protected:inthours,minutes,seconds;};classDate{public:Date(intm,intd,inty){month=m;day=d;year=y;}voiddisplay(){cout出生年月:year年month月day日endl;}protected:intmonth,day,year;};classBirthtime:publicDate,publicTime{public:Birthtime(char*name,intmon,intd,inty,inth,intm,ints):Date(mon,d,y),Time(h,m,s){Childname=newchar[strlen(name)+1];strcpy(Childname,name);}~Birthtime(){delete[]Childname;}voidprint(){cout小孩的名字是:Childnameendl;Date::display();Time::display();}private:char*Childname;};voidmain(){Birthtimea(lihua,12,2,1993,8,34,23);a.print();}3、编写一个学生和教师的数据输入和显示程序。学生数据有编号、姓名、性别、年龄、系别和成绩,教师数据有编号、姓名、性别、年龄、职称和部门。要求将编号、姓名、性别、年龄的输入和显示设计成一个类Person,并作为学生类Student和教师类Teacher的基类。#includeiostream.hclassPerson{char*name;char*sex;intage;public:Person(char*n,char*s,inta){name=n;sex=s;age=a;}~Person(){delete[]name;}voidprint(){cout姓名:name性别:sex年龄:ageendl;}};classStudent:publicPerson{char*sno;char*xi;doublefen;public:Student(char*sn,char*x,doublef,char*n,char*s,inta):Person(n,s,a){sno=sn;xi=x;fen=f;}voidprint(){cout学生的编号:sno学生的系列:xi学生的成绩:fenendl;Person::print();}};classTeacher:publicPerson{char*num;char*job;intdepart;public:Teacher(char*nu,char*j,intd,char*n,char*s,inta):Person(n,s,a){num=nu;job=j;depart=d;}voidprint(){cout老师的编号:num老师的职称:job老师的部门:departendl;Person::print();}};intmain(){Studentm(122515,ji,98,li,gril,21);m.print();Teacherb(12,math,98,wang,gril,35);b.print();return0;}4、给出下面的基类:classarea{protected:doubleheight;doublewidth;public:area(doubleh,doublew){height=h;width=w;}virtualdoublegetarea()=0;};【要求】(1)建立基类area的俩个派生类rectangle与isosceles,让每一个派生类都包含一个函数getarea(),分别用来返回矩形与三角形的面积。用构造函数对height与width进行初始化。(2)写出主程序,用来求height与width分别为10.0与5.0的矩形面积,以及求height与width分别为4.0与6.0的三角形面积。(3)要求通过使用基类指针访问虚函数的方法(即运行时的多态性)分别求出矩形和三角形面积。#includeiostream.hclassarea{protected:doubleheight;doublewidth;public:area(doubleh,doublew){height=h;width=w;}virtualdoublegetarea()=0;};classrectangle:publicarea{public:rectangle(doubleh,doublew):area(h,w){}virtualdoublegetarea(){cout矩形的长是:width矩形的高是:heightendl;cout矩形的面积是:width*heightendl;return0;}};classisosceles:publicarea{public:isosceles(doubleh,doublew):area(h,w){}virtualdoublegetarea(){cout三角形的底是:width三角形的高是:heightendl;cout三角形的面积是:0.5*width*heightendl;return0;}};intmain(){area*p;rectanglem(10.0,5.0);isoscelesn(4.0,6.0);p=&m;p-getarea();p=&n;p-getarea();return0;}5、编写一个程序,递归调用被继承的基类成员函数,实现求素数的功能#includeiostream.hclassA{public:A(inti){m=i;}intisprime(inti);protected:intm;};intA::isprime(inti){intk;for(k=2;km;k++){if(m%k==0)return0;elsereturn1;}}classprime:publicA{public:prime(inti=0):A(i){}};intmain(void){intn;cinn;primeobj(n);if(obj.isprime(3))coutn是素数endl;elsecoutn不是素数endl;return0;}
本文标题:实验三-派生类与继承
链接地址:https://www.777doc.com/doc-4925734 .html