实验四 继承与派生
c 继承与派生实验报告

c 继承与派生实验报告
C 继承与派生实验报告
实验目的:通过实验,掌握C语言中继承与派生的概念和使用方法,加深对面向对象编程的理解。
实验内容:在C语言中,继承与派生是面向对象编程中非常重要的概念。
在本次实验中,我们将通过一个简单的例子来演示C语言中的继承与派生的用法。
首先,我们定义一个基类(父类)Person,包括姓名和年龄两个成员变量,以及一个显示信息的成员函数。
然后,我们定义一个派生类(子类)Student,继承自Person类,新增一个成员变量学号,并重写显示信息的成员函数。
在实验中,我们首先创建一个Person对象,设置姓名和年龄,然后调用显示信息函数,观察结果。
接着,我们创建一个Student对象,设置姓名、年龄和学号,再次调用显示信息函数,观察结果。
实验结果:通过实验,我们成功实现了C语言中的继承与派生。
我们发现,通过继承,子类Student可以直接使用父类Person中的成员变量和成员函数,同时可以新增自己的成员变量和函数。
这样的设计使得代码更加简洁和灵活,提高了代码的复用性和可维护性。
结论:C语言中的继承与派生是面向对象编程中非常重要的概念,通过本次实验,我们深入理解了这一概念的用法和意义。
掌握了继承与派生的方法后,我们可以更加灵活地设计和编写程序,提高代码的质量和效率。
总结:通过本次实验,我们对C语言中的继承与派生有了更深入的理解,加深了对面向对象编程的认识。
在今后的学习和工作中,我们将更加灵活地运用继承与派生的方法,提高代码的质量和效率。
实验四 继承与派生1(报告)

验
环
境
Visual Studio 2010
实
验
内
容
编写程序计算出球、圆柱、圆锥,都含有求表面积和体积。
要求:
(1)定义一个基类圆类至少含有一个数据成员半径;
(2)定义基类成员的派生类:球、圆柱、圆锥,都含有球表面积和体积的成员函数和输出函数。
(3)在主函数中求球、圆柱、圆锥的表面积和体积。
算
法
描
述
及
实
验
步
骤
1、基类圆的定义
ห้องสมุดไป่ตู้如上图,包含半径、周长、面积,能够输出圆的基本信息。
2、派生类的定义(球、圆柱、圆锥)
派生类球(Ball)的定义,公有继承Circle,增加变量表面积S与体积V及输出函数。
派生类圆柱(Column)公有继承Circle,增加自己的属性变量高high及表面积S、体积V,输出函数。
派生类圆锥(Cone)也是公有继承Circle,增加高high、表面积S、体积V和输出函数。
如上图主函数。
实
验
结
果
第一次运行结果:
第二次运行结果:
出
现
的
问
题
及
解
决
方
案
程序编译一次成功了,但运行结果不对。原因是在计算圆锥体积和球的体积时要用到两个分数1/3、4/3参与运算,但在计算机中这两个分数是由两个整形变量计算而来的,其结果也是一个整形变量(0和1),所以运行结果错误,将其改成1.0/3与4.0/3即可,这样就是两个float型变量计算,结果也是我们要的结果了。
课程名称
C++程序设计A2
班级
1420561
实验四 继承与派生

实验四继承与派生一、实验目的:掌握利用单继承和多重继承的方式定义派生类的方法;深刻理解在各种继承方式下构造函数和析构函数的执行顺序;理解和掌握公有继承,私有继承和保护继承对基类成员的访问机制;理解虚基类的概念以及引入虚基类的目的和作用。
二、实验时间:三、实验地点:四、实验内容:1.运行以下程序,并对运行结果进行分析#include"stdafx.h"#include<iostream>using namespace std;class base{int n;public:base(int a){cout<<"constructing base class"<<endl; n=a;cout<<"n="<<n<<endl;}~base(){cout<<"desstructing base class"<<endl;}};class subs:public base{ base bobj;int m;public:subs(int a,int b,int c):base(a),bobj(c) {cout<<"constructing sub class"<<endl; m=b;cout<<"m="<<m<<endl;}~subs(){cout<<"destructing sub class"<<endl;}};void main(){subs s(1,2,3);}●subs s(1,2,3);subs(int a,int b,int c):base(a),bobj(c)所以a=1,b=2,c=3,●class subs:public base,又因为base(a),所以先调用base 传一个参数的构造函数base(int a),(若此处删去base(a),则会出现如下错误)●调用base(int a),所以有●然后,因为base bobj;所以这里还会调用base(int a)构造函数,此时传入的a值为bobj(c)中的c,即3,所以有●再者,才会调用subs的构造函数subs(int a,int b,intc):base(a),bobj(c)●相反,在调用析构函数的时候,顺序刚刚好相反,则~base(){cout<<"desstructing base class==>:"<<n<<endl;}~subs(){cout<<"destructing sub class==>:"<<m<<endl;}2.设计一个圆类circle和一个桌子类table,另外设计一个圆桌类roundtable,从前2个类派生的,要求输出一个圆桌的高度,面积和颜色等数据。
实验继承与派生

实验项目:继承与派生实验目的:1.学习定义和使用类的继承关系,定义派生类2.熟悉不同继承方式下对基类成员的访问控制实验任务:1.定义一个基类Animal,有私有整形成员变量age,构造其派生类dog,在其成员函数SetAge(int n)中直接给age赋值,看看会有什么问题,把age改为公有成员变量,还会有问题吗2.定义一个基类BaseClass,有整形成员变量Number,构造其派生类,观察其构造函数和析构函数的执行情况。
3.定义一个车类(vehicle)基类,有MaxSpeed、Weight等成员变量,Run、Stop等成员函数,由此派生出自行车(bicycle)类、汽车(motorcar)类。
自行车(bicycle)类有高度(Height)等属性,汽车(motorcar)类有座位数(Seatnum)等属性。
,在继承和过程中,注意把vehicle设置为虚基类。
如果不把vehicle设置为虚基类,会有什么问题变成试试看。
实验步骤:1.编写程序定义Animal,成员变量age定义为私有的。
构造其派生类dog,在其成员函数SetAge(int n)中直接对age赋值时,会出现错误提示:程序名lab5_1.cpp2.编写程序定义一个基类BaseClass,构造其派生类DerivedClass,在构造函数和析构函数中用cout输出提示信息,观察构造函数和析构函数的执行情况。
程序名lab5_2.cpp3.用debug功能跟踪程序lab5_2.cpp的执行过程,观察基类和派生类的构造函数和析构函数的的执行过程。
4.编写程序定义车类(vehicle),由此派生出自行车(bicycle)类、汽车(motorcar),把vehicle设置为虚基类。
再从bicycle和motorcar派生出摩托车(motorcycle)类,在main()函数中测试这个类。
程序名lab5_3.cpp。
编译成功后把vehicle设置成非虚基类,在编译一次,此时系统报错,无法编译成功。
实验四:派生类和继承(一)

福建农林大学实验报告实验4 派生类和继承(一)一、实验目的和要求(1)掌握派生类的声明与定义方法,进一步理解类的继承的概念,能够定义和使用类的继承关系。
(2)熟悉公有派生和私有派生的访问特性。
二、实验内容和原理1、(1)定义一个基类Animal,该类具有私有整型成员变量age,weight,构造派生类Dog公有继承Animal。
Dog类新增私有成员变量color,新增成员函数SetAge(int n)中直接给age赋值,新增成员函数SetWeight(int m)中直接给weight赋值,查看编译结果,并分析结果。
(2)将类Anima l中的age和weight为公有成员,重做第一步,并分析结果。
(3)将类Animal中的age和weight 为保护成员,重做第一步,并分析结果。
(4)将派生类Dog的继承方式改为私有继承方式和保护继承方式重做以上各小题,并分析结果。
2、程序分析题(写出程序的输出结果,并分析结果)。
三、实验环境1. 硬件:PC机;2. 软件:Windows操作系统、Visual C++ 6.0四、算法描述及实验步骤1、(1):#include <iostream.h>class animal{private:int age,weight;};class dog:public animal{private:char color[10];public:int SetAge(int n){age=n;return n;}int SetWeight (int m){weight=m;return m; }};int main(){ int x,y;dog a;cout<<"Please input dog's age :";cin>>x;cout<<endl;cout<<" Please input dog's weight:";cin>>y;cout<<endl;cout<<"The dog's age is "<<a.SetAge(x)<<endl;cout<<"The dog's age weight is"<<a.SetWeight(y)<<endl; return 0;}(2):#include <iostream.h>class animal{public:int age,weight;};class dog:public animal{private:char color[10];public:int SetAge(int n){age=n;return n;}int SetWeight (int m){weight=m;return m; }};int main(){ int x,y;dog a;cout<<" Please input dog's age :";cin>>x;cout<<endl;cout<<" Please input dog's weight:";return 0;}(3):#include <iostream.h>class animal{private:int age,weight;};class dog:public animal{private:char color[10];public:int SetAge(int n){age=n;return n;}int SetWeight (int m){weight=m;return m; }};int main(){ int x,y;dog a;cout<<" Please input dog's age :";cin>>x;cout<<endl;cout<<" Please input dog's weight:";cin>>y;cout<<endl;cout<<" The dog's age is "<<a.SetAge(x)<<endl;cout<<" The dog's age weight is "<<a.SetWeight(y)<<endl; return 0;}(4):#include <iostream.h>class animal{private:int age,weight;};class dog:public animal{private:char color[10];public:int SetAge(int n){age=n;return n;}int SetWeight (int m){weight=m;return m; }};int main(){ int x,y;dog a;cout<<" Please input dog's age :";cin>>x;cout<<endl;cout<<" Please input dog's weight:";return 0;}(5):#include <iostream.h>class animal{private:int age,weight;};class dog:public animal{private:char color[10];public:int SetAge(int n){age=n;return n;}int SetWeight (int m){weight=m;return m; }};int main(){ int x,y;dog a;cout<<" Please input dog's age :";cin>>x;cout<<endl;cout<<" Please input dog's weight:";cin>>y;cout<<endl;cout<<" T The dog's age is "<<a.SetAge(x)<<endl;cout<<" The dog's age weight is "<<a.SetWeight(y)<<endl; return 0;}(6):#include <iostream.h>class animal{private:int age,weight;};class dog:public animal{private:char color[10];public:int SetAge(int n){age=n;return n;}int SetWeight (int m){weight=m;return m; }};int main(){ int x,y;dog a;cout<<" Please input dog's age :";cin>>x;cout<<endl;cout<<" Please input dog's weight:";return 0;}(7):#include <iostream.h>class animal{private:int age,weight;};class dog:public animal{private:char color[10];public:int SetAge(int n){age=n;return n;}int SetWeight (int m){weight=m;return m; }};int main(){ int x,y;dog a;cout<<" Please input dog's age :";cin>>x;cout<<endl;cout<<" Please input dog's weight:";cin>>y;cout<<endl;cout<<" The dog's age is "<<a.SetAge(x)<<endl;cout<<" The dog's age weight is "<<a.SetWeight(y)<<endl; return 0;}(8):#include <iostream.h>class animal{private:int age,weight;};class dog:public animal{private:char color[10];public:int SetAge(int n){age=n;return n;}int SetWeight (int m){weight=m;return m; }};int main(){ int x,y;dog a;cout<<" Please input dog's age :";cin>>x;cout<<endl;cout<<" Please input dog's weight:";return 0;}(9):#include <iostream.h>class animal{private:int age,weight;};class dog:public animal{private:char color[10];public:int SetAge(int n){age=n;return n;}int SetWeight (int m){weight=m;return m; }};int main(){ int x,y;dog a;cout<<" Please input dog's age :";cin>>x;cout<<endl;cout<<" Please input dog's weight:";cin>>y;cout<<endl;cout<<" The dog's age is "<<a.SetAge(x)<<endl;cout<<" The dog's age weight is "<<a.SetWeight(y)<<endl; return 0;}2#include<iostream.h>class A{public: A(int i,int j){a=i;b=j;}void move(int x,int y){a+=x;b+=y;}void display(){cout<<"("<<a<<","<<b<<")"<<endl;} private:int a,b;};class B:public A{public: B(int i,int j,int k,int l):A(i,j),x(k),y(l){}void display(){cout<<x<<","<<y<<endl;}void fun1(){move(13,15);}void fun2(){A::display();}void fun3(){display();}private:int x,y;int main(){A aa(2,4);aa.display();B bb(5,6,7,8);bb.fun1();bb.fun2();bb.fun3();bb.A::display();bb.B::display();return 0;}五、调试过程1、调试程序,截图如下:原因分析:在public继承中void display 中的display打错成diaplay。
实验四 继承与派生(学生)

实验四:继承与派生(2)一、实验目的和要求(1)理解单继承与多继承,掌握多继承派生类的声明方式。
(2)掌握多继承派生类构造函数的定义的一般形式。
(3)掌握多继承构造函数与析构函数的执行顺序。
(4)掌握含有对象成员的派生类构构造函数的特点。
(5)理解类的继承可能发生的“二义性”问题(同名成员的访问)二、知识点回顾多继承构造函数定义的一般形式如下:派生类名(参数总表):基类名1(参数表1),基类名2(参数表2),…,基类名n(参数表n) {// 派生类新增成员的初始化语句}class B: public A class D:public A, public B, public C{ {B(int i,int j):A( i){ ….. D(int i,int j,int k, int l):A( i),B(j ),C( k),ob(l ) } { …….}}; };…….D obj(1,2,3,4);多重继承构造函数的执行顺序与单继承下的构造函数执行顺序相同:(1)先执行基类的构造函数。
(2)再执行对象成员的构造函数。
(3)最后执行派生类的构造函数体。
说明:处于同一层的各个基类的构造函数的执行顺序, 取决于声明派生类时所指定的各个基类的顺序, 与派生类构造函数中所定义的成员初始化列表中的顺序并没有关系.说明:派生类构造函数后如未列出基类构造函数的调用,默认调用的是无参或带默认参数的构造函数。
三、实验内容1. P191题4.15输入下列程序,分析程序运行结果........。
理解多重继承(画出类的层次结构图),注意派生类构造函数的定义格式,注意构造函数的执行顺序,注意同名成员的访问。
#include<iostream>#include<string>using namespace std;class B1{int b1;public:B1(int i){b1=i;cout<<"Construcor B1."<<i<<endl;}void print(){ cout<<b1<<endl;}};class B2{int b2;public:B2(int i){b2=i;cout<<"Construcor B2."<<i<<endl;}void print(){ cout<<b2<<endl;}};class B3{int b3;public:B3(int i){b3=i;cout<<"Construcor B1."<<i<<endl;}int getb3(){ return b3;}};class A:public B2,public B1{int a;B3 bb;public:A(int i,int j,int k,int l):B1(i),B2(j),bb(k) //此处注意派生类构造函数的定义格式{a=l;cout<<"Constructor A."<<l<<endl;}void print() //{ B1::print(); //同名成员的访问,注意消除二义性B2::print(); //同名成员的访问cout<<a<<","<<bb.getb3()<<endl;}};int main(){ A aa(1,2,3,4);aa.print(); //分析调用的是哪个print(). 同名覆盖(将基类的同名成员隐藏)return 0;}在以上程序的基础上,为每个类增加一个析构函数,析构函数体内容“Destructor X”,其中X写成具体的类名。
实验四 继承与派生

实验四继承与派生一. 实验目的:1.了解继承与派生的概念,掌握派生类声明的方式和派生类的构成。
2. 掌握派生类成员的访问属性。
3. 掌握派生类构造函数的定义方法。
4. 掌握多重继承的方法。
5. 掌握虚基类的使用。
6. 掌握基类与派生类的转换关系。
二. 实验类型:验证型实验和设计型实验三. 验证型实验内容:1.编写运行下面程序,体会继承与派生的概念,学习派生类声明的方式并了解派生类的构成。
#include <iostream>#include <string>using namespace std;class Person //声明基类{public:void set_person(char[],int,char);void display_person( );private :char name[20];int age;char sex;};void Person::set_person(char na[],int a,char s){strcpy(name,na);age=a;sex=s;}void Person::display_person( ){ cout<<"name:"<<name<<endl;cout<<"age:"<<age<<endl;cout<<"sex:"<<sex<<endl;}class Student: public Person //声明派生类{ public:void set_student(char[],int,char,int,char[],int); //派生类新增加成员函数void display_student( ); //派生类新增加成员函数private:int num; //派生类新增加数据成员char speciality[20]; //派生类新增加数据成员int grade; //派生类新增加数据成员};void Student::set_student(char na[],int a,char s,int n,char sp[],int g)//设置派生类中全部数据成员{set_person(na,a,s); //调用派生类继承的基类成员函数num=n;strcpy(speciality,sp);grade=g;}void Student::display_student( ) //显示派生类中全部数据成员{ display_person( ); //调用派生类继承的基类成员函数cout<<"num:"<<num<<endl;cout<<"speciality:"<<speciality<<endl;cout<<"grade:"<<grade<<endl;}int main( ){Student s; //定义派生类对象s.set_student("wang",21,'m',20060701,"JAVA",2);s.display_student();return 0;}提示:在开发环境中,通过在派生类对象后面输入成员访问运算符可以看到派生类中的成员列表,了解派生类的构成。
实验四 继承与派生

班级:计科(2)班学号:201013137183 姓名:王于铭完成时间:2011-4-21实验四继承与派生[实验目的]1、学习定义和使用类的继承关系,定义派生类;2、熟悉不同继承方式下对集类成员的访问控制;3、学习和利用虚基类解决二义性问题;[实验内容与步骤]4、设计一个人事管理的“people(人员)”基类。
考虑到通用性,仅只抽象出所有类型人员都具有的属性:编号、姓名、性别、出生日期、身份证号等;从people(人员)类派生出student(学生)类,并添加属性:班号class no;从people(人员)类派生teacher(教师)类,并添加属性:职务principalship、部门department;从student类中派生出graduate(研究生)类,添加属性:专业subject、导师teacher adviser (teacher类);从graduate类和teacher类派生出TA(助教生)类。
设计时注意虚基类的使用,注意重载相应的成员函数。
测试这些类。
[源代码]#include<iostream>#include<string>using namespace std;class Date{private:int year,month,day;public:Date(int y=2010,int m=1,int d=1){year=y;month=m;day=d;}~Date(){}Date(Date &p);int Get_Date(){cout<<"出生年月:"<<year<<"-"<<month<<"-"<<day;return 1;}void Set_Date(int y,int m,int d){year=y;month=m;day=d;}};Date::Date(Date &p){year=p.year;month=p.month;day=p.day;}class people{private:string name,idcard,num;char sex;Date a;public:people(string n,string i,string m,char s,Date b):a(b){name=n; num=m;idcard=i;sex=s;}~people(){}void Set_name(string n){name=n;}void Set_idcard(string i){idcard=i;}void Set_num(string m){num=m;}void Set_sex(char s){sex=s;}string Get_name(){return name;}string Get_idcard(){return idcard;}string Get_num(){return num;}char Get_sex(){return sex;}void Set_people(string n,string i,string m,char s,int y,int mon,int d){Set_name(n);Set_idcard(i);Set_num(m);Set_sex(s);a.Set_Date(y,mon,d);}void Get_people(){cout<<"编号: "<<Get_num()<<" 姓名: "<<Get_name()<<" 身份证号: "<<Get_idcard()<<" 性别: "<<Get_sex()<<" ";a.Get_Date();cout<<endl;}};class student:virtual public people{private:string classNO;public:student(string n,string i,string m,char s,Date b,string c):people(n,i,m,s,b),classNO(c){}~student(){}void Set_classNO(string c){classNO=c;}void Get_student(){Get_people();cout<<"classNO: "<<classNO<<endl;}void Set_student(string n,string i,string m,char s,int y,int mon,int d,string c){Set_people(n,i,m,s,y,mon,d);Set_classNO(c);}};class teacher:virtual public people{private:string principalship;string department;public:teacher(string n,string i,string m,char s,Date b,string p,string depart):people(n,i,m,s,b){principalship=p;department=depart;}~teacher(){}void Set_principalship(string p){principalship=p;}void Set_department(string d){department=d;}void Set_teacher(string n,string i,string m,char s,int y,int mon,int d,string p,string depart){Set_people(n,i,m,s,y,mon,d);Set_principalship(p);Set_department(depart);}void Get_teaher(){people::Get_people();cout<<"职务: "<<principalship<<" 部门: "<<department<<endl;}};class graduate:virtual public student{private:string subject;teacher teacher_adviser;//这是一个类!public:graduate(string n,string i,string m,char s,Date b,string c,string sub,teacher t):student(n,i,m,s,b,c),people(n,i,m,s,b),teacher_adviser(t){subject=sub;}~graduate(){}string Get_subject(){return subject;}void Get_graduate(){student::Get_student();cout<<"subject: "<<Get_subject()<<endl;teacher_adviser.Get_teaher();}void Set_subject(string sub){subject=sub;}void Set_grduate(string n,string i,string m,char s,int y,int mon,int d,string c,string sub,teacher t){Set_student(n,i,m,s,y,mon,d,c);Set_subject(sub);//teacher_adviser.Set_teacher(n,i,m,s,y,mon,d,p,sdepart);}};class TA:virtual public graduate,public teacher{public:TA(string n,string i,string m,char s,Date b,string c,string sub,teacher t,string p,string depart):student(n,i,m,s,b,c),graduate(n,i,m,s,b,c,sub,t),people(n,i,m,s,b),teacher(n,i,m,s,b,p,depart){} ~TA(){}void Get_TA(){student::Get_student();cout<<"subject: "<<Get_subject()<<endl;teacher::Get_teaher();}// void Set_TA(){Set_grduate();Set_teacher();}};void main(){Date a(2011,4,21);student b("韩笑","201012","201013138012",'M',a,"1001");b.Get_student();cout<<endl;teacher c("张毅","201012","201013138012",'M',a,"教授","2222");c.Get_teaher();cout<<endl;graduate d("赵军","201012","201013138012",'M',a,"2001","c++",c);d.Get_graduate();cout<<endl;TA e("王于铭","201012","201013138012",'M',a,"1001","c++",c,"教授","2022");e.Get_TA();cout<<endl;}[实验截图][实验小结]本程序大体能完成实验目的,框架已经构架好,但是程序的内容需要不断完善。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
实验四继承与派生(4学时)
[实验目的]
1、学习定义和使用类的继承关系.定义派生类;
2、熟悉不同继承方式下对基类成员的访问控制;
3、学习利用虚基类解决二义性问题。
[实验内容与步骤]
1、编程,定义一个基类Animal,有私有整型成员变量age,构造其派生类Dog,在其成员
函数SetAge(int n)中直接给变量age赋值,观察会发生什么问题,将age改为公有成员变量,再观察执行情况。
2、定义一个基类BaseClass,含整型成员变量Number,构造其派生类DerivedClass,观察
构造函数和析构函数的执行情况。
3、编程,定义一个车(Vehicle)基类,具有MaxSpeed、Weight等成员变量,Run、Stop
等成员函数,由此派生出自行车(Bicycle)类、汽车(MotorCar)类。
其中,自行车(bicycle)类有高度(Height)等属性,汽车类有座位数(SeatNum)等属性。
从自行车类和汽车类派生出摩托车(Motorcycle)类。
在继承过程中,注意把vehicle设置为虚基类。
如果不把vehicle设置为虚基类,会有什么问题?
4、从实验一、5中的people(人员)类派生出student(学生)类,添加属性:班号ClassNO;people
类派生出teacher(教师)类,添加属性:职务principalship、部门Department。
从student 类中派生出graduate(研究生)类,添加属性:专业subject、导师teacher adviser;从graduate 类和teacher类派生出TA(助教生)类,注意虚基类的使用。
注意重载相应的成员函数,测试这些类。
[实验要求]
1、明确实验目的,理解和掌握课程教学中的有关基本概念,并加以灵活应用以解决实际问
题,提高分析问题和解决问题的能力。
2、根据[实验内容与步骤],做好实验前的预习,并按要求拟定解决问题的算法和编制程序。
3、写出实验报告,包括实验目的、实验内容中的题目、算法及程序清单、测试数据及运行
结果、调试分析和体会。
[习题与思考题]
1、定义一个基类BaseString,实现基本的输入字符串的功能。
2、定义一个类继承自BaseString,实现字符串的倒置功能。
3、定义一个类继承自BaseString,实现字符串的copy功能。
4、定义一个类继承自BaseString,实现字符串的compare功能。
5、为基类BaseString增加功能,并在继承的过程中声明为虚基类,体会虚基类在解决二义
性问题中的作用。
6、建立一个基类building,含有保护成员floors、rooms和square,分别用来表示一座楼
房的层数、房间数以及它的总面积数。
建立类building的派生类house,含有私有成员bedrooms和balcony,分别用来表示卧室与阳台的数量。
另外,建立类building的派生类office,含有私有成员phones和meeting_rooms,分别用来表示电话与会议室的数目。
这两个派生类都含有构造函数和show( ) 函数,用于对数据成员进行初始化和显示出这些数据。
7、已知有一个类figure:
class figure
{
public:double height;
double width;
};
要求再建立两个继承figure类的派生类square与isosceles_triangle,让每一个派生类都包含一个函数area( ),分别用来显示矩形与等腰三角形的面积。
8、编写一个用于记录及管理学生成绩的类Score,其含有三个私有数据成员Chi、Eng和
Mat,分别表示中文、英语和数学的成绩,定义两个重载构造函数对各科成绩进行初始化。
类Score中含有三个成员函数InputScore( )、ComputeAvr( ) 和PrintScore( ),分别用于输入新的成绩、计算平均成绩及打印出各科成绩。
再建立一个类Student,作为类Score的派生类,其中含有四个成员函数Name、Major、Number和AvrScore,分别表示学生的姓名、专业、学号和平均成绩;另外含有三个成员函数DefineData( )、PrintData( ) 和MakeAvr( ),分别用于输入各数据成员的值、打印各数据成员的值和计算平均成绩。