面向对象程序设计实验项目
面向对象程序设计实验(二)2024

面向对象程序设计实验(二)引言概述:本文档旨在介绍面向对象程序设计实验(二)的相关内容。
实验(二)主要涉及面向对象程序设计中的基本概念和实践技巧。
通过本次实验,学生可以进一步巩固对于面向对象程序设计的理解和应用能力。
正文内容:1. 类与对象1.1 定义类和对象的基本概念1.2 区分类和对象的特点和属性1.3 类的成员变量与成员函数的关系1.4 类的继承与派生的用法和作用1.5 类型转换和类型检查的重要性和技巧2. 封装和继承2.1 封装的原则和目的2.2 不同类型的访问控制修饰符的应用与实践2.3 继承的基本概念和实现方法2.4 多态性的应用与实例解析2.5 接口与抽象类的定义和使用3. 异常处理3.1 异常处理的基本原则和作用3.2 异常的分类与处理方式3.3 异常处理的语法和使用方法3.4 异常处理的常见问题和解决策略3.5 异常处理的最佳实践和注意事项4. 面向对象设计的思想和原则4.1 面向对象设计的核心概念和思维方式4.2 SOLID设计原则的介绍和实践应用4.3 设计模式的分类和使用场景4.4 常用设计模式的详细介绍和实例应用4.5 面向对象设计的常见问题和解决策略5. 实践与案例分析5.1 针对实验要求的代码设计与实现5.2 对实验结果的分析和评价5.3 面向对象程序设计思想在实验中的运用和效果5.4 实际项目中的面向对象设计相关问题的解决方法5.5 实验总结和下一步改进计划总结:通过本次面向对象程序设计实验(二),学生能够更好地理解和应用面向对象的基本概念和设计原则,并能够灵活运用相关技巧进行程序开发和问题解决。
实验的实践部分更加加深了对面向对象程序设计的理解和实际应用能力的培养。
这些知识和技能对于学生未来的软件开发和项目管理工作具有重要意义。
实验二面向对象的程序设计

实验二面向对象的程序设计(2课时)一、实验目的1 )熟悉类的定义和使用。
2)掌握创建对象的方法。
3)掌握只读字段的声明及使用。
4)学习定义和使用带参数构造函数。
5)熟悉访问权限控制符。
6)掌握属性的定义和使用。
7)掌握关键字this。
8)理解继承的概念,学会定义和使用派生类。
9)学会定义和使用接口。
10)掌握继承过程中的方法重写,区分它与方法隐藏、方法重载的不同。
11)掌握多态。
12)熟悉关键字base。
二、实验要求1)程序结构清晰、语句完整,包含有头文件和main函数;2)格式正确,语句采用缩进格式;3)设计子函数实现题目要求的功能;4)编译、连接通过,熟练使用命令键;5)运行结果正确,输入输出有提示,格式美观。
三、实验设备、材料和工具1)奔腾2计算机或以上机型2)C#.NET2008四、实验内容和步骤实验内容:1、创建一个描述图书信息的类并测试。
类中应保存有图书的书号、标题、作者、出版社、价格等信息。
步骤:1)定义图书类Book,Book类中包含isbn(书号)、title (标题)、author(作者)、press (出版社)、price (价格)等私有字段。
由于对一本书来说,书号是唯一的,因此,isbn字段应声明为只读的。
2)为Book类中的每个字段定义相应的属性,由于isbn字段只读的,其相应属性也应该是只读的。
3)为Book类定义两个构造函数,其中,一个构造函数将所有字段都初始化为用户指定的值,另一个构造函数只要求用户指定有关书号的信息,它将调用上一个构造函数初始化对象,初始化时,价格取0,除书号的其他信息取“未知”。
4)为Book类定义方法Show,Show方法用于显示图书的所有信息。
5)编写Main方法测试Book类,Main方法中分别使用上述两个构造函数创建Book对象。
2、根据几何图形的组合与继承关系定义用于描述点、直线、三角形、四边形、正方形、圆等几何图形的类(或结构)。
要求首先定义一个几何图形接口描述所有几何图形的共有特性,上述几何图形都必须现实该接口,并且其中用于描述点的类型最好定义为结构。
面向对象程序设计(C++)实验一--类和对象

实验一类和对象一、实验目的:掌握类的设计和对象的创建及相关知识点如对象数组、类聚合、友元函数、静态成员。
二、实验内容:1、设计圆类,求两个圆的位置关系;2、设计圆类和直线类,求直线与圆的位置关系;3、设计学生类,求某班学生成绩的最高分、最低分及平均分;4、设计部门类和教师类,其中部门类成员为教师类的子对象;5、设计家庭银行账户类,其中账户资金为静态数据成员,为家庭成员共享;6、设计复数类,友元函数实现复数的加减。
三、实验过程:1、根据实验题目确定需要设计哪些类、各类中包含哪些数据成员和函数成员,设计各成员的访问权限,设计数据成员的数据类型,设计函数成员的函数原型;2、给出类设计的程序实现,特别要注意重载构造函数的实现;3、在主函数中完成题目中的逻辑,一般情况下需要创建相关类的对象,通过对象对成员函数的调用或者通过对象指针对成员函数的调用完成相应的功能。
四、参考程序代码:1、设计圆类,求两个圆的位置关系#include <iostream>#include <math.h>using namespace std;class Circle{private:float a,b,r;public:Circle(float c,float d,float e){a=c;b=d; r=e;}friend void position(Circle &,Circle &);};void position(Circle &c1,Circle &c2){float n,m,p;p=sqrt((c1.a-c2.a)*(c1.a-c2.a)+(c1.b-c2.b)*(c1.b-c2.b)); n=fabs(c1.r-c2.r);m=c1.r+c2.r;if(p>m)cout << "相离";if(p==m)cout << "相切";if(p<m)cout << "相交";}int main(){float a,b,c,d,e,f;cin >> a >> b >> c >> d >> e >> f ;Circle c1(a,b,c),c2(d,e,f);position(c1,c2);return 0;}运行结果:2、设计圆类和直线类,求直线与圆的位置关系#include<iostream>#include<math.h>using namespace std;class Circle//圆类{private:float x,y,r;public:Circle(float a,float b,float c) {x=a;y=b;r=c;}float getx(){return x;}float gety(){return y;}float getr(){return r;}};class Line//直线类{private:float a,b,c;public:Line(float x,float y,float z){a=x;b=y;c=z;}void position(Circle c1){float d=fabs(a*c1.getx()+b*c1.gety()+c)/sqrt(a*a+b*b) ;//圆心到直线的距离if(d<c1.getr())cout << "相交";if((d-c1.getr())<0.000001)cout << "相切";cout << "相离";}};int main(){Line l1(3,3,4);//创建直线对象Circle c1(-23,3,7);//创建圆对象l1.position(c1);return 0;}运行结果:3、设计学生类,求某班学生成绩的最高分、最低分及平均分#include <iostream>#include <string.h>using namespace std;class Student{private:char name[20],xuehao[20];float math;public:Student(){}Student(char *na,char *xu,float ma):math(ma) {strcpy(name,na);strcpy(xuehao,xu);}void set(char *na,char *xu,float ma){math=ma;strcpy(name,na);strcpy(xuehao,xu);}char *get_name(){return name;}char *get_xuehao(){return xuehao;float get_math(){return math;}};void max_min(Student stu[],int n){Student max,min;max=min=stu[0];for(int i;i<n;i++){if(stu[i].get_math()>max.get_math())max=stu[i];if(stu[i].get_math()<min.get_math())min=stu[i];}cout << "学生成绩最高:" << max.get_name() << "," << max.get_xuehao() << "," << max.get_math() << endl;cout << "学生成绩最低:" << min.get_name() << "," << min.get_xuehao() << "," << min.get_math() << endl;}void ave(Student stu[],int n){float sum=0;for(int i=0;i<n;i++){sum=sum+stu[i].get_math();cout << "ave=" << sum/n;}int main(){char na[20],xu[20];float ma;Student stu[20];int n;cout << "请输入学生总人数"; cin >> n;for(int i=0;i<n;i++){cin >> na >> xu >> ma ; stu[i].set(na,xu,ma); }max_min(stu,n);ave(stu,n);return 0;}运行结果:4、设计部门类和教师类,其中部门类成员为教师类的子对象#include <iostream>#include <string.h>using namespace std;class Department{private:int dep_num;char dep_master[20];char dep_name[20];public:Department(){}Department(int num,char *ma,char *na){dep_num=num;strcpy(dep_master,ma);strcpy(dep_name,na);}void show(){cout << dep_num << "," << dep_master << "," << dep_name ; }};class Teacher{private:char name[20];char haoma[20];Department dep;public:Teacher(char *n,char *nu,int num,char *ma,char *na):dep(num,ma,na) {strcpy(name,n);strcpy(haoma,nu);}void show(){dep.show();cout << "," << name << "," << haoma << endl;}};int main(){Teacher hp("wanghai","12345",6,"kiki","computer");hp.show();return 0;}运行结果:5、设计家庭银行账户类,其中账户为静态数据成员,为家庭成员共享#include <iostream>#include <string.h>using namespace std;class Familymember//家庭成员类{private:char membername[10];//成员名public:static float account;//共享账户资金 Familymember(char *name);static void save(float money);//存钱 static void pay(float money);//支出 static void show(); //显示账户余额};float Familymember::account=0;Familymember::Familymember(char *name) {strcpy(membername,name);}void Familymember:: save(float money) {account= account+money;}void Familymember:: pay(float money){account= account-money;}void Familymember:: show(){cout<<account<<endl;}int main()//主函数{ Familymember husband("wang"),wife("Li"); husband.save(10000);wife.pay(3000);wife.save(5000);wife.show();husband. show();}运行结果:6、设计复数类,友元函数实现复数的加减#include <iostream>using namespace std;class Fushu{private:float ss,xs;public:Fushu(){}Fushu(float a,float b){ss=a;xs=b;}friend Fushu jiafa(Fushu &f1,Fushu &f2){return Fushu((f1.ss+f2.ss),(f1.xs+f2.xs)); }friend Fushu jian(Fushu &f1,Fushu &f2){return Fushu((f1.ss-f2.ss),(f1.xs-f2.xs)); }void show(){cout << ss << " + " << xs << "i" << endl; }};int main(){Fushu f1(2,3),f2(4,5);Fushu f3,f4;f3=jiafa(f1,f2);f4=jian(f1,f2);f3.show();f4.show();return 0;}运行结果:。
《python语言实训》面向对象程序设计实验

《python语言实训》面向对象程序设计实验一、实验目的1、掌握面向对象程序设计的思想。
2、掌握类的定义。
3、掌握对象的创建和使用。
4、掌握属性和方法的访问控制、★△类属性和实例属性、类的方法。
5、掌握继承、多重继承、多态。
6、掌握程序流程控制语句、函数与模块、数据结构等知识内容与面向对象程序设计的综合应用。
二、实验内容1、对象的创建和使用,在Python中,用赋值的方式创建类的实例,创建对象后,通过实例对象访问这个类的属性和方法。
2、从面向过程到面向对象,面向过程程序设计采用自顶向下的方法,分析出解决问题所需要的步骤,将程序分解为若干个功能模块,每个功能模块用函数来实现。
3、定义属性、定义方法、创建实例对象、调用属性和方法。
4、构造方法,在生成对象时调用,可以用来进行一些属性初始化操作,不需要显示去调用,系统会默认去执行。
5、类方法、实例方法和静态方法,方法的访问控制使用。
6、类与对象的应用、属性与方法的应用。
7、类中内置的方法、类方法、实例方法、静态方法。
8、继承与多态的应用、面向对象程序设计案例的应用。
9、Python程序控制结构、数据结构、函数与模块与面向对象程序设计方法的综合案例。
三、主要实验设备及器材1、计算机终端1套(配备Windous10系统或Windows7系统,英特尔i5及以上的处理器,4G以上内存,256G硬盘)。
2、多媒体教学设备1套。
3、网络设备套件1套。
4、Python软件、PyCharm软件、Anaconda软件等Python软件1套。
四、实验步骤(1)演示性实验教师利用多媒体等设备,对本章节的知识在Python语言的相关软件上进行演练。
(2)验证性实验学生指对Python的语言对象有了一定了解,并提出自己的相关问题,然后学生利用实验室的电脑设备解决问题。
(3)设计性实验设计程序以解决金融工程中的计量分析问题。
2、实验步骤(1)Python的Car对象的创建。
(2)在精灵宝可梦游戏中创建小火龙角色,对给出的各个属性进行迭代和私有化。
面向对象程序设计实验报告1

实验一
实验名称:实验一Visual C++环境
实验目的:
⒈熟悉VC++的集成开发环境,学习运行一个C++程序的步骤。
y=fun(x);
if(y==0)
cout<<"they input num is sushu"<<endl;
else
cout<<"they input num is not sushu"<iostream.h>
#include<math.h>
float fun(float a,float b,float c,float d)
return 0;
3. #include<iostream.h>
void main()
{inta,b,c,d,e;
double score;
a=b=c=d=0;
cin>>score;
while(score>=0)
{
if(score>=90)
a++;
else
if(score>=80)
b++;
else
if(score>=70)
do{
*p=*(--p);
}while( p>s+n);
(*p)=c;
}
return s;
}
int main()
C++面向对象程序设计》实验报告

《C++面向对象程序设计》实验内容实验1 C++程序设计初步1.实验目的(1)了解在C++编译系统(Visual C++6.0)上如何编辑、编译、连接和运行一个C++程序。
(2)通过运行简单的C++程序, 初步了解C++源程序的结构和特点。
(3)掌握简单C++程序的编写和调试方法。
(4)掌握重载函数的定义方法。
(5)能正确使用引用型变量。
2.实验内容和步骤(1)在Visual C++环境下编译和运行C++程序①先进入Visual C++6.0环境。
②在自己指定的子目录中建立一个名为test.cpp的新文件。
③从键盘输入以下程序int main(){int a,b;c=a+b;cout>> “a+b=”>>a+b;}选择Build→Compile test.cpp命令, 对此源程序进行编译。
观察和分析编译信息。
⑤根据编译信息指出的错误, 修改程序。
再进行编译, 如果还有错, 再重复此过程, 直到编译不出错为止。
⑥选择Build→Build test.exe命令, 对程序进行连接, 如果不出错, 就会生成可执行程序test.exe。
⑦选择Build→Execute test.exe命令, 执行可执行程序test.exe。
观察屏幕的变化。
在输出窗口应显示程序运行结果。
⑧分析结果是否正确, 如果不正确或认为输出格式不理想, 可以修改程序, 然后重新执行以上④和⑧步骤。
改过后的程序:#include<iostream>using namespace std;int add(int x,int y){int z;z=x+y;return(z);}int main(){int a,b,c;cin>>a>>b;c=add(a,b);cout<<"a+b="<<c<<endl;return 0;}实验2 C++对C的扩充(2)编一个程序, 用来求2个或3个正整数中的最大数。
面向对象程序设计实验一及实验报告样式

《面向对象程序设计》实验一实验报告1 实验目的:(1)了解在VC++、C-free中如何编辑、编译、连接和运行一个C++程序;(2)掌握声明类的方法,类和类的成员的概念以及定义对象的方法(3)了解多文件的C++程序结构2 实验任务(1)输入两个整数,将它们按由大到小的顺序输出。
要求使用变量的引用;(2)编写一个程序,将两个字符串连接起来,结果取代第一个字符串;(3)声明Animal 类,数据成员有age,成员函数有SetAge()等。
首先把数据成员声明为公有的,在main()函数中访问,再把它改为私有的,指出在main()函数中访问会出现怎样的情况,如何避免?该程序需要在同一个文件中分别给出类的声明、类的实现、类的演示每部分的代码。
(4)声明日期类,数据成员有year、month、day,成员函数有输出日期、加一天等。
练习使用多文件结构来组织程序。
3 程序清单实验一:#include"iostream"using namespace std;int main(){int i,j;cout<<"input two number"<<endl;cin>>i>>j;swap(i,j);cout<<i<<","<<j<<endl;return 0;}void swap(int &a,int &b){int temp;temp=a;a=b;b=temp;}实验二:#include"iostream"#include"string"using namespace std;int main(){string string1,string2;cout<<"please input two string:";cin>>string1>>string2;string1=string1+string2;cout<<string1<<endl;return 0;}实验三:4 运行结果图1.1 任务一运行结果图2.1任务二运行结果5 总结或感悟(对运行结果所作的分析以及本次调试程序所取得的经验。
面向对象程序设计实验

面向对象程序设计实验一、概述面向对象程序设计(Object-oriented programming,简称OOP)是一种编程范式,它将现实世界的实体抽象为对象,并将对象之间的关系通过消息传递来实现。
本实验旨在通过实践学习面向对象程序设计的基本概念和技巧。
二、实验目标1. 掌握面向对象程序设计的基本思想和原则;2. 学习使用面向对象的方法解决实际问题;3. 熟悉常见的面向对象编程语言,并能够灵活运用。
三、实验内容1. 设计一个简单的图书管理系统,要求包括以下类:(1)图书类(Book):包含图书的基本信息,如书名、作者、出版社等;(2)图书馆类(Library):包含图书馆的基本信息,如名称、地址等,并可实现图书的借阅和归还功能;(3)读者类(Reader):包含读者的基本信息,如姓名、性别、年龄等,并可实现借阅和归还图书的功能。
2. 根据面向对象的思想,设计类的成员变量和成员方法,并进行适当的封装和继承。
3. 使用面向对象编程语言(如Java、C++等)实现上述设计,并编写测试代码,验证功能的正确性和可靠性。
四、实验步骤1. 确定图书类(Book)的成员变量和成员方法,如书名、作者、出版社等,并进行封装。
2. 确定图书馆类(Library)的成员变量和成员方法,如名称、地址等,并封装图书的借阅和归还功能。
3. 确定读者类(Reader)的成员变量和成员方法,如姓名、性别、年龄等,并封装借阅和归还图书的功能。
4. 根据设计完成的类,使用面向对象编程语言实现,并编写测试代码,验证功能的正确性和可靠性。
五、实验结果经过实验,我们成功设计并实现了一个简单的图书管理系统。
通过该系统,图书馆可以方便地管理和借还图书,读者也可以轻松地借阅和归还图书。
六、实验总结通过本次实验,我深入理解了面向对象程序设计的基本概念和技巧。
面向对象的方法能够更好地解决实际问题,提高程序的可读性和可维护性。
在今后的学习和工作中,我会继续深化对面向对象编程的理解,并将其应用于实际项目中。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
实验一 C++面向过程练习(一) (2学时) ✧ 实验目的和要求:1.掌握C ++程序的基本格式与规范,学会编写简单的C ++程序。
2.理解C ++程序的结构和特点。
3.熟悉C ++程序基本的输入和输出操作。
4.掌握C ++数据类型、常量和变量以及修饰符的使用方法。
5.掌握C ++的各种流程控制语句的使用。
6. 熟悉C ++语言实验环境,能够在VC6.0或BC3.0的环境下调试与运行程序。
✧ 实验内容:1. 求解方程02=++c bx ax 在复数域上的解,a,b,c 由终端输入。
注意分析的全面性。
2. 用!1!21!111n e ++++≈ ,求e 之值,直到610!1-<n 为止。
实验二 C++面向过程练习(二)(2学时)✧ 实验目的和要求:1. 掌握一维数组、二维数组的定义与使用。
2. 掌握函数定义、函数调用和函数说明的方法。
3. 掌握函数递归调用的概念和使用方法。
✧ 实验内容:1. 编程求若干个整数中的最大和次大,最小和次小这四个数。
2. 由键盘输入两个整数,试编写两个函数分别求出这两个数的最大公约数和最小公倍数。
3. 编写一个递归函数void reverse(int a[],int n),将数组a 中的数倒置。
如a 数组原来为:1 2 3 4 5,则调用reverse 函数后,a 数组内容变为:5 4 3 2 1。
实验三 C++在非面向对象方面的扩充(2学时) ✧ 实验目的和要求:1.掌握函数重载的方法及定义重载函数时的注意事项。
2.掌握函数缺省参数的使用。
3.掌握指针的定义及使用方法,理解void 型指针。
4.理解动态内存分配意义,掌握new 和 delete 使用方法。
5.掌握引用的声明方法及使用。
6.掌握const 修饰符及其内联函数的使用。
7.熟悉C++在非面向对象方面的其他扩充特性。
✧实验内容:1.编写10个重载函数max,分别求两个整数、实数、双精度数、字符、字符串及三个整数、单精度数、双精度数、字符、字符串中的最大数。
2.编写函数void add1(int sum),void add2(int * sum),void add3(int & sum),功能如下:输入若干个整数,以0结束,并用参数sum返回这若干个整数之和。
在主程序中分别调用这三个函数,观察结果,总结值传递和地址传递的规律。
3.矩阵中填数:当给出N*N 的矩阵,要求用程序填入下列形式的数:(1)S形填数,例如N=5 (2)回转填数,例如N=5要求:用new和delete动态分配空间(提示:可用一维数组来表示二维数组)。
实验四类与对象(一)(4学时)✧实验目的和要求:1.掌握类、类的数据成员、类的成员函数的定义方式。
2.理解类成员的访问控制方式。
3.掌握对象的定义和操作对象的方法。
4.理解和掌握构造函数、析构函数、拷贝构造函数的定义与执行过程。
5.掌握重载构造函数的方法。
6.理解浅拷贝与深拷贝。
7.了解对象的生存期。
✧实验内容:1.设计三个图形类:Circle(圆)、Rectangle(矩形)、Triangle(三角形),要求:(1)Circle 类基本信息:圆心坐标、半径;Rectangle 类基本信息:长、宽;Triangle 类基本信息:三个顶点坐标;其中:成员变量为private 属性,成员函数为public 属性。
(2)为Circle类设计缺省的构造函数,并用init成员函数进行数据成员的初始化。
(3)为其余两个类设计多个构造函数:无参、带参、参数值缺省的构造函数。
(4)每个图形类有计算图形的面积GetArea(),计算图形的周长GetPerimeter(),显示图形的基本信息函数Show(),修改基本信息的函数Set(形参)。
以Circle 类为例:通过GetArea()计算圆的面积,GetPerimeter()计算圆的周长,Show()函数中显示圆心坐标、直径、周长、面积等基本信息;Set(int x,int y, int r)函数可以修改圆心坐标和半径。
(5)注意多个构造函数的声明方式与定义的实现。
(6)当输入数据为不合理数据时(例如:输入的三角形的顶点是否能组成一个三角形),提示用户输入错误。
2.一维数组是应用极为广泛的数据结构,但是C++语言的数组没有下标越界检查,因而极易出错。
请定义一个安全的一维整型数组类intArray,要求:(1)基本信息:存储数据的基址指针,数组的大小,均定义为private属性。
(2)定义构造函数、析构函数、拷贝构造函数。
(3)定义以下成员函数:int GetSize();返回数组的大小,即数组的元素个数。
int GetAt(int nIndex) ;获得nIndex索引位置上的数组元素值。
void SetAt(int nIndex , int newElement);向nIndex位置设定新的newElement值。
(4)使用intArray类实现一个冒泡排序程序。
实验五类与对象(二)(4学时)✧实验目的和要求:1.掌握对象数组的定义与使用方法。
2.理解对象指针的概念,学会用指针引用对象。
3.理解this指针的工作方式。
4.掌握静态数据成员和静态成员函数的基本使用方法。
5.理解友元与友元函数的作用,掌握其使用方法。
6.掌握对象成员及其常类型的使用方法。
7.学会使用C++的多文件方式编写程序。
✧实验内容:1.设计一个Student(学生)类,并使Student类具有以下特点:(1)该类具有学生姓名、学号、程序设计、信号处理、数据结构三门课程的成绩。
(2)学生全部信息由键盘输入,以提高程序的适应性。
(3)通过成员函数分别统计每个学生的平均成绩和每门课程的平均成绩,当课程数量增加或减少时成员函数无需修改仍可求取平均成绩。
(4)输出学生的各科成绩与平均成绩。
(5)学生对象的定义采用对象数组实现。
(6)统计不及格学生人数。
(7)表格输出整齐美观。
(8)能以最方便的方式实现对课程数量和学生人数的修改。
(9)采用多文件方式组织程序。
实验六继承与派生类(4学时)✧实验目的和要求:1.理解类的继承的概念,能够定义和使用类的继承关系。
2.掌握派生类的声明与定义方法。
3.熟悉三种派生方式的访问特性。
4.掌握多基继承,理解和掌握虚基类。
5.理解赋值兼容规则。
✧实验内容:1.定义点Point类作为基类,在此基础上派生出直线Line类和圆Circle类,在Circle类的基础上以不同的属性派生出圆柱Cylinder类和球Spheroid类。
并要求基类和各派生类具有以下特点:(1)Line类含有计算直线长度和斜率的成员函数。
(2)Circle类含有计算圆面积的成员函数。
(3)Cylinder类含有计算圆柱表面积和体积的成员函数。
(4)Spheroid类含有计算球体的表面积和体积的成员函数。
(5)要求在实验报告中画出类层次图。
2.小型公司人员管理。
某小型公司有四类人员:总经理、技术人员、销售经理、推销员。
设计一个基类person,并派生出employee(职员),再由employee派生出manager(总经理)、technician(技术人员)、salesmanager(销售经理)、saleman(推销员)。
销售经理既是经理又是销售人员,兼具两类人员的特点,因此同时继承manager 和salesman 两个类。
(1)类定义●person类:基本信息:姓名、性别、出生日期(使用自定义的Date(日期)类)其中:基本信息为private 属性,成员函数为public 属性●Date 类:成员变量:年、月、日●派生类employee :新增属性:编号、职位、薪水等●派生类technician:新增属性:工作时间●派生类saleman:新增属性:销售额、所属部门(2)实现人员信息的录入与显示。
(3)计算并显示个人月薪:月薪计算办法:总经理拿固定月薪8000 元,技术人员按每小时25 元领取月薪;推销员的月薪按当月销售额的4%提成;销售经理固定月薪5000 元加所管辖部门当月销售总额的5‰。
实验七多态性与虚函数(4学时)✧实验目的和要求:1.理解编译时的多态性和运行时的多态性。
2.掌握虚函数的定义与使用方法。
3.掌握纯虚函数和抽象类的概念和使用方法,运用纯虚函数实现多态性。
✧实验内容:1.在实验六题目1的基础上,增加以下内容:在Line类的基础上派生长方形Rectangle类和正方形Squre类,并分别在长方形Rectangle类和正方形Squre类的基础上派生长方体Cuboid类和正方体SquareBody类,并要求基类和各派生类具有计算各图形的周长、面积和体积的功能,要求用纯虚函数实现。
注:可先定义一个抽象类---图形Figure类,含有求周长、面积、体积的纯虚函数,用此类进行派生。
假设某个图形由上述几个图形组成,求该图形的总面积(若为平面图形)或总体积(若为立体图形)。
2.员工管理:(1)将实验六中题目2中不同员工的工资计算函数pay(),改用虚函数实现。
(2)将每个类中的信息显示函数:display()改用虚函数实现。
(3)对每个类增加一个升职函数:promote()。
(4)employee()类中的pay()和display()设计为纯虚函数;在主函数中便可以依据赋值兼容规则用基类类型的指针数组来处理不同派生类的对象。
(5)由于不同类的对象调用升级函数promote()需要赋于不同的实参值,难以对各类对象统一处理,因此,employee()中promote()定义为虚函数,各派生类再定义同名函数。
实验八运算符重载(6学时)✧实验目的和要求:1.理解运算符重载的概念和使用方法。
2.掌握运算符重载的两种形式。
3.掌握几种常用运算符的重载。
✧实验内容:1.请为complex类(复数类)定义下列重载运算符函数(1)算术运算符+、-、*、/;(2)求复数的共轭运算符!(3)插入运算符<<;(4)提取运算符〉〉2.请为fraction类(分数类)定义下列重载运算符函数(1)算术运算符+、-、*、/;(2)关系运算符<,>,<=,>=,==,!=(3)插入运算符<<;(4)提取运算符>>3.对实验四中的题目2实现的intArray类定义下标运算符“[]”重载函数,并用下标运算符的方法实现冒泡排序。
实验九模板(2学时)✧实验目的和要求:1.掌握函数模板及其声明方法。
2.掌握模板函数及其生成方法。
3.学习类模板的声明与使用方法。
✧实验内容:1.定义函数模板实现求一维数组中所有数据的和。
其数据类型可以为整数、单精度数、双精度数、字符型数,并规定字符型数据的和为这两个字符连接起来的字符串,如:‘a’+‘b’=“ab”。