实验四类的继承与多态实验
更新时间:2024-05-05 21:33:01 阅读量: 综合文库 文档下载
- 实验四类的继承与多态实验推荐度:
- 相关推荐
实验四 类的继承与多态实验
【实验目的】
1.理解软件重用性的一种形式——继承。 2.能够通过继承已有的类创建新类。 3.理解基类和派生类的概念。
4.能够在派生类中使用构造函数和析构函数 5.学习虚基类在解决二义性问题中的作用。
6.熟悉多态分类,理解静态联编和动态联编概念。 7.掌握运算符重载方法。
8.理解虚函数、纯虚函数和抽象类概念。 9.掌握用抽象类和多态性实现编程的方法。 【实验内容】
1.分析程序,写出下列程序的运行结果: (1) #include
class Base {
private: int base_priv_dat; protected: int base_prot_dat; public: void base_show(); };
class Derived:public Base {
private: int derived_priv_dat; public: void derived_show(); };
void Base::base_show() { base_priv_dat=1; //基类函数可以操纵私有和保护型基类数据 base_prot_dat=2; cout<<\ <<\}
void Derived::derived_show() { derived_priv_dat=3; base_prot_dat=4; //派生函数可以处理保护型基类数据,但不能处理私有基类数据 cout<<\ <<\ base_show(); //派生函数可以调用公有基类函数
}
int main() { Derived d_obj; d_obj.base_show(); //可用派生对象调用基类函数 d_obj.derived_show(); return(0); }
(2) #include
#include
public: Person(const char* s) //带参数的构造函数 { name=new char[strlen(s)+1]; strcpy(name,s); } ~Person(){delete []name;} //析构函数做清理工作 char *GetName(){return name;} protected: char *name; };
class Student:public Person { char *major; public: Student(const char * s,const char *m):Person(s) //派生类构造函数 {major=new char[strlen(m)+1];strcpy(major,m);} ~Student(){delete[] major;} //派生类析构函数 char *GetMajor(){return major;} };
int main() { Student stu(\ cout<<\ < 2.编译运行下列程序,分析出现编译错误的原因,并给出解决办法。 #include protected: int a; public: Base(){a=30;} }; class B1:public Base { public: B1(){cout<<\}; class B2:public Base { public: B2(){cout<<\}; class Derived:public B2,public B1 { public: Derived(){cout<<\}; int main() { Derived d; return(0); } 3.开发一个简单的大学人员管理程序,该程序可以管理大学的一些基本人员:学生(student)、教师(teacher)、教授(professor)。首先设计一个虚基类person。通过该类保存人员的最基本信息:姓名(name)、年龄(age)和性别(sex)。然后使用该类派生出学生类student和教师类teacher,在其中添加各自的特性,如在student类中添加如下信息:专业(speciality),在teacher类中添加院系(department)等。还有部分教师在工作的同时在职修读学位,因此同时具有教师和学生双重身份,所以由student类和teacher类再次派生出stuTeacher类。为每个类定义一个输出函数print(),输出该类相关信息。 4.用运算符重载设计有理分数类,实现+、-、*、/等操作。 提示: 创建一个有理分数类Rational,有两个数据成员,一个构造函数,四个运算符重载函数,一个显示函数和一个约简函数。其中数据成员有分子numerator和分母denominator,构造函数可以避免分母为0,对不是约化型的分数进行约化。显示函数显示计算结果。约简函数对分数进行化简。 5.用运算符重载设计复数类,实现复数的+、-、*、/运算。 6.某学校对教师每月工资的计算规定如下:固定工资+课时补贴。教授的固定工资为5000元,每个课时补贴50元。副教授的固定工资为3000元,每个课时补贴30元。讲师的固定工资为2000元,每个课时补贴20元。定义教师抽象类,派生不同职称的教师类,编写程序求若干个教师的月工资。 注:4、5选做一题。 【思考题】 1.组合与继承的区别是什么? 2.公有继承、保护继承和私有继承分别在什么情况下使用? 3.什么是虚基类?有何作用? 4.静态联编和动态联编有什么区别? 5.简述空的虚函数与纯虚函数的区别? 6.简述抽象类和具体类的区别? #include private: int base_priv_dat; protected: int base_prot_dat; public: void base_show(); }; class Derived:public Base { private: int derived_priv_dat; public: void derived_show(); }; void Base::base_show() { base_priv_dat=1; //基类函数可以操纵私有和保护型基类数据 base_prot_dat=2; cout<<\ <<\base_prot_dat=\} void Derived::derived_show() { derived_priv_dat=3; base_prot_dat=4; //派生函数可以处理保护型基类数据,但不能处理私有基类数据 cout<<\ <<\ base_show(); //派生函数可以调用公有基类函数 } int main() { Derived d_obj; d_obj.base_show(); //可用派生对象调用基类函数 d_obj.derived_show(); return(0); } #include public: Person(const char* s) //带参数的构造函数 { name=new char[strlen(s)+1]; strcpy(name,s); } ~Person(){delete []name;} //析构函数做清理工作 char *GetName(){return name;} protected: char *name; }; class Student:public Person { char *major; public: Student(const char * s,const char *m):Person(s) //派生类构造函数 {major=new char[strlen(m)+1];strcpy(major,m);} ~Student(){delete[] major;} //派生类析构函数 char *GetMajor(){return major;} }; int main() { Student stu(\ cout<<\ Major is:\ < #include protected: int a; public: Base(){a=30;} }; class B1:virtual public Base { public: B1(){cout<<\}; class B2: virtual public Base { public: B2(){cout<<\}; class Derived:public B2,public B1 { public: Derived(){cout<<\}; int main() { Derived d; return(0); } #include class person { public: void print(); person(char a[],int b,char c[]); protected: char name[20]; int age; char sex[5]; }; person::person(char a[],int b,char c[]) { strcpy(name,a); age=b; strcpy(sex,c); } void person::print() { cout<<\姓名\\年龄\ \性别\\} class teacher:virtual public person { public: teacher (char a[],int b,char c[],char d[]); void print(); protected: char department[50]; }; teacher::teacher(char a[],int b,char c[],char d[]):person(a,b,c) { strcpy(department,d); } void teacher::print() { person::print(); cout< class student:virtual public person { public: student (char a[],int b,char c[],char d[]); void print(); protected: char speciality[50]; }; student::student(char a[],int b,char c[],char d[]):person(a,b,c) { strcpy(speciality,d); } void student::print() { person::print(); cout< class professor: public person { public: void print(); professor(char a[],int b,char c[],char d[],char e[]); protected: char position[50]; char department[50]; }; professor::professor(char a[],int b,char c[],char d[],char e[]):person(a,b,c) { strcpy(position,d); strcpy(department,e); } void professor::print() { person::print(); cout< class stuTeacher:public teacher,public student { public: stuTeacher(char a[],int b,char c[],char d[],char e[]); void print(); }; stuTeacher::stuTeacher(char a[],int b,char c[],char e[]):person(a,b,c),student(a,b,c,d),teacher(a,b,c,e) {} void stuTeacher::print() { person::print(); cout< int main() { teacher a(\男\电院\ a.print(); student b(\刘道广\男\计算机\ b.print(); professor c(\女\教授\材工\ c.print(); stuTeacher d(\女\国际贸易\管院\ 系\d[],char 院系\院 d.print(); return(0); } #include float m,n; class fraction { public: fraction(float x=1,float y=1); fraction operator +(fraction& c); fraction operator -(fraction& c); fraction operator *(fraction& c); fraction operator /(fraction& c); void display(void); private: float a; float b; }; fraction::fraction(float x,float y) { a=x; b=y; } fraction fraction::operator +(fraction& c) { m=a+c.a; n=b+c.b; return(fraction(m,n)); } fraction fraction::operator -(fraction& c) { m=a-c.a; n=b-c.b; return(fraction(m,n)); } fraction fraction::operator *(fraction& c) { m=a*c.a-b*c.b; n=a*c.b+b*c.a; return(fraction(m,n)); } fraction fraction::operator /(fraction& c) { if(c.a==0&&c.b==0) { cout<<\输入错误\ exit(0); } m=(a*c.a+b*c.b)/(c.a*c.a+c.b*c.b); n=(b*c.a-a*c.b)/(c.a*c.a+c.b*c.b); return(fraction(m,n)); } void fraction::display() { cout< int main() { fraction x(3,4),y(1,2),z; z=x+y; z.display(); z=x-y; z.display(); z=x*y; z.display(); z=x/y; z.display(); return(0); } 运行结果: 4+6i 2+2i -5+10i 2.2+-0.4i
正在阅读:
实验四类的继承与多态实验05-05
perl 基本语法介绍03-25
各系列高级职称申报具体条件06-07
Wireshark抓包实验报告03-02
普通员工个人年终工作述职报告参考范文08-03
时间序列建模分析05-10
高处作业吊篮安装拆除技术交底 - 图文10-20
怎么祛除妊娠纹、妊娠纹怎么去掉04-24
哈工大机器人大作业05-31
- 多层物业服务方案
- (审判实务)习惯法与少数民族地区民间纠纷解决问题(孙 潋)
- 人教版新课标六年级下册语文全册教案
- 词语打卡
- photoshop实习报告
- 钢结构设计原理综合测试2
- 2014年期末练习题
- 高中数学中的逆向思维解题方法探讨
- 名师原创 全国通用2014-2015学年高二寒假作业 政治(一)Word版
- 北航《建筑结构检测鉴定与加固》在线作业三
- XX县卫生监督所工程建设项目可行性研究报告
- 小学四年级观察作文经典评语
- 浅谈110KV变电站电气一次设计-程泉焱(1)
- 安全员考试题库
- 国家电网公司变电运维管理规定(试行)
- 义务教育课程标准稿征求意见提纲
- 教学秘书面试技巧
- 钢结构工程施工组织设计
- 水利工程概论论文
- 09届九年级数学第四次模拟试卷
- 实验
- 多态
- 继承
- 毛概复习题
- 家庭情况调查表、国家助学金申请表、认定表、承诺书
- 高中英语研究性课题 - 英汉表达差异 - 图文
- 颜真卿生平及书法艺术浅析
- 2014校务计划
- 蒙德(MODROL)IMS-GL2变频器说明书 - 图文
- 法语口语620句,全背下来直接和法国人对话
- Access2003数据库的使用
- 3-关于进一步加强本市建筑起重机械监督管理的通知(沪建建管2009
- 北师大版小学五年级语文下册第三单元试卷1
- 关于建设工程项目招标中标后监督检查的办法(全文)-粤建市〔200
- 广西服装生产加工企业名录694家
- 基于单片机的直流电机调速系统软件设计
- 课程设计2
- 会计专业可行性报告
- (铁总建设91号)中国铁路总公司关于进一步规范铁路基建大中
- 铁道部科学技术档案软封皮、备考表、卷内目录、竣工图标式样、材
- 文言实词词义及课文例句整理
- 低压配电设计规范 - 图文
- 组合家具策划