实验5-类与对象
- 格式:doc
- 大小:504.50 KB
- 文档页数:5
面向对象的程序设计(C++)教学大纲教学目的本课程为高级语言程序设计的入门课程,完全针对零起点的学生,可作为其他信息类相关课程的基础课。
目标是使学生通过本课程的学习,掌握面向对象程序设计的基本概念和方法、C++的基本语法和编程方法;学会使用集成开发环境;掌握程序调试方法;初步了解常用数据结构和非数值算法;初步了解C++标准模板库的使用方法。
教学任务完成《C++语言程序设计(第4版)》教材内容,及《C++语言程序设计(第4版)学生用书》中的实验内容,另有学生自主选题的大作业、选作的论文回报告。
学时:大课30、实验30、课外30、课外讨论10学时。
教学内容的结构课程由4个模块共12个教学单元组成,对应于《C++语言程序设计(第4版)》的十二章内容。
教学活动以及教学方法上的基本要求大课、实验、课外作业、自选题目的大作业、论文和报告结合,学时大课30、实验30、课外30。
另有课外讨论环节。
通过大课讲解基本原理和方法;通过实验课巩固大课内容,并在助教辅导下完成基础实验,当堂由助教验收;课外作业由学生独立完成,并提交清橙考试系统进行评分。
自选题目的大作业要在期中提交选题报告,逐一批改并给出评语,期末提交全部文档及程序并且逐一答辩。
答辩形式为:学生演示5分钟,教师提问5分钟,当即给出成绩。
论文和报告属于加分因素。
课外讨论安排在每次大课之后,加1学时,自愿参加,每人每学期至少参加一次。
内容为:教师对难点进行复习、讲解补充例题,学生提问和讨论。
模块及单元教学目标与任务模块1:程序设计基础单元1 绪论要点:●面向对象程序设计语言的产生和特点,面向对象方法的由来及其基本概念,面向对象的软件工程简介;●信息在计算机中的表示和存储,程序的开发过程。
教学任务:1.1计算机程序设计语言的发展1.2面向对象的方法1.3面向对象的软件开发1.4信息的表示与存储1.5程序的开发过程作业及实验:作业1、实验一单元2 C++简单程序设计要点:●C++语言的发展历史及其特点;●构成C++语句的基本部分—字符集、关键字、标识符、操作等;●C++的基本数据类型和自定义数据类型;●顺序、选择和循环结构。
类与对象课程设计一、教学目标本课程的教学目标是使学生掌握类与对象的基本概念,理解面向对象编程的基本原理和方法,能够运用类与对象的知识解决实际编程问题。
1.理解类和对象的概念及其关系。
2.掌握如何定义类和创建对象。
3.掌握类成员变量、成员方法和构造方法的定义和应用。
4.理解继承、多态和封装的原理及应用。
5.能够使用面向对象编程的思想编写程序。
6.能够运用类和对象的知识进行程序设计和调试。
7.能够运用继承、多态和封装等面向对象编程技术解决实际问题。
情感态度价值观目标:1.培养学生的编程兴趣,提高学生对计算机科学的热爱。
2.培养学生团队合作精神,提高学生沟通交流能力。
3.培养学生解决问题的能力,提高学生创新思维。
二、教学内容本课程的教学内容主要包括类与对象的基本概念、面向对象编程原理、类与对象的应用以及面向对象编程技术的实践。
1.类与对象的基本概念:介绍类和对象的概念、特点及其关系。
2.面向对象编程原理:讲解继承、多态和封装的原理及应用。
3.类与对象的应用:讲解如何使用类和对象解决实际编程问题。
4.面向对象编程技术的实践:通过案例分析和编程实验,使学生掌握面向对象编程的方法和技巧。
三、教学方法本课程采用讲授法、讨论法、案例分析法和实验法等多种教学方法。
1.讲授法:用于讲解类与对象的基本概念、原理和应用。
2.讨论法:用于探讨面向对象编程的技巧和方法,提高学生思考和分析问题的能力。
3.案例分析法:通过分析实际案例,使学生更好地理解类与对象的知识。
4.实验法:通过编程实验,让学生动手实践,巩固所学知识。
四、教学资源本课程所需教学资源包括教材、参考书、多媒体资料和实验设备。
1.教材:选用权威、实用的教材,为学生提供系统的学习资料。
2.参考书:提供丰富的参考资料,帮助学生拓展知识面。
3.多媒体资料:制作精美的PPT、教学视频等,提高课堂教学效果。
4.实验设备:保证学生能够进行编程实验,提高实践能力。
五、教学评估本课程的评估方式包括平时表现、作业、考试等,旨在全面、客观、公正地评价学生的学习成果。
要求:
1.报告格式和内容要求:
a. 内容和格式整齐。
大标题采用黑体四号字加粗,小标题采用小四号字加粗。
正
文采用五号宋体,单倍行距。
b. 贴图时请剪裁到适当大小,要保证打印时可以看清,但也不要太大以免“越界”。
c. 不要在报告中写与实验无关的话,内容要有条理、完整、并能突出重点,要将
遇到的主要问题说明。
2.文件格式要求:
a. 将实验成果放入一个文件夹中,文件夹的内容包括:本实验报告、项目。
b. 文件夹以“学号姓名_S1”为文件名。
其中,S1表示这是实验1的报告,S大写,
以后的实验报告以类似方法编号顺延,注意:你的学号放在姓名前。
c. 注意:所有文件保存后关闭,然后再打包成RAR文件,以免提交的内容丢失或
打不开。
3.提交方式和时间:一周内完成。
可以将文件包发到我邮箱zcwang@。
4.主动查阅资料,坚持自己亲手完成实验,弄清每个步骤和相关原理。
实验一类和对象一、实验目的:掌握类的设计和对象的创建及相关知识点如对象数组、类聚合、友元函数、静态成员。
二、实验内容: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;}运行结果:。
面向对象程序设计(C++)实验报告指导老师:***学生:吴健班级:软131学号:*********目录实验一、VC6.0环境入门与简单程序设计实验报告 (3)实验二、函数的应用实验报告 (7)实验三、类与对象实验报告 (14)实验四、C++程序结构实验报告 (22)实验五、数组、指针与字符串实验报告 (26)实验六、继承和派生实验报告 (33)实验七、多态性实验报告 (42)实验八、面向对象综合实验实验报告 (48)实验一、VC6.0环境入门与简单程序设计实验报告系软件工程班级 131 学号 139074164 姓名吴健同组者指导教师柯栋梁一、实验目的:1、熟悉VC++6.0开了环境并编写简单的C++程序。
3、使用C++语言编写简单的输入输出程序。
4、使用VC++6.0的DEBUG调试功能:单步执行、设置断点、观察变量值。
二、实验内容:1、使用VC++建立一个标准C++程序,编译、运行如下程序:#include<iostream〉Int main(){Cout〈<”Hello World!\n";Cout<<”Welcome to C++!\n";}2、编程计算图形的面积。
程序可计算圆形、长方形、正方形等的面积,运行时首先提示用户选择图形类型,然后根据不同图形类型,输入相关参数计算其面积,并将其显示出来.3、使用DEBUG功能观察任务2程序运行中变量值的变化情况.三、实验要求:1、任务1要求熟悉VC++开发环境,并能够使用其建立第一个C++程序.2、实验前要做好充分准备,包括程序清单、调试步骤、调试方法,以及对程序结果的分析等。
四、实验报告:1.程序运行截图2.面积计算1、程序说明。
用if -else语句进行选择程序功能,while语句实现功能的循环实现程序如下:#include〈iostream>#include〈cmath〉using namespace std;int main(){cout〈<”1计算圆面积”<〈endl〈<"2计算矩形面积"<〈endl〈<"3计算正方形面积”〈〈endl<<"4退出"〈〈endl<<"请选择相应功能代码:”;int x; //x对应编号cin〉>x;double area;while(x!=4){if(x==1){double r;cout〈〈"半径:";cin〉>r;area=3。
《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个正整数中的最大数。
面向对象程序设计实验指导书(适用:电子信息11级)彭召意陶立新编写计算机与通信学院2014.9目录实验一 C++基础的应用 (1)实验二类和对象的应用 (3)实验三类的构造函数、析构函数的应用 (4)实验四友员和运算符重载 (5)实验五类的继承与派生 (6)实验六类的多态性与虚函数 (7)附录:各实验的程序代码 (8)实验一 C++基础的应用(实验课时:2 实验性质:设计)实验名称: C++基础的应用实验目的: (1)进一步学习VC++6.0开发环境及程序调试方法。
(2)练习C++函数的定义及使用;(3)练习C++数组的定义及使用;(4)练习C++指针的定义及使用;(5)练习C++结构体的定义及使用;(6)练习多文件的程序的编译和运行方法;实验设备:(1)硬件:个人微机(配置不低于:CPU为P4,主频1.6G,内存256MB,硬盘40GB);(2)软件:操作系统为WindowsXP(或2000、server2003等),工具软件为Visual C++6.0。
实验内容: (1)熟悉Visual C++6.0编译系统的常用功能,特别是debug调试功能;(2)编程1:编写一个程序c1.cpp,用来求2个或3个整数的最大数。
要求:用重载函数的方法来求最大数;函数原型:int max( int a, int b) 和int max( int a, int b,int c)。
(3)编程2:编写一个程序c2.cpp,求:a!+ b! + c!的值。
要求:使用递归函数。
主程序和函数分开到两个源程序文件中,分别进行编译后,再运行;(4)编程3:有一个3*4的矩阵,要求编程求出其中值最大的那个元素的值,以及其所在的行号和列号;(5)编程4:建立一个动态链表并进行输出和删除管理。
链表的每个节点为学生信息,包括:学号,姓名,性别,下一学生信息的指针。
程序的工作:(a)建立三个学生信息的节点,然后顺序输出该三个学生信息;(b)删除中间的节点,再顺序输出学生信息。
实验四类,对象和接口一.实验目的(1)掌握类的声明,对象的创建以及方法的定义和调用。
(2)掌握打包机制。
(3)掌握类的继承。
(4)掌握类接口的使用。
二、实验方案(1)//Father.java;package tom.jiafei;public class Father{int height;protected int money;public int weight;public Father(int m){money=m;}protected int getMoney(){return money;}void setMoney(int newMoney){money=newMoney;}}//Jerry.java:import tom.jiafei.Father;public class Jerry extends Father{public Jerry(){super(20);}public static void main(String args[]){Jerry jerry=new Jerry();jerry.weight=200;jerry.money=800;int m=jerry.getMoney();System.out.println("m="+m);}}(2)interface ShowMessage{void 显示商标(String s);}class TV implements ShowMessage{public void 显示商标(String s){System.out.println(s);}}class PC implements ShowMessage{public void 显示商标(String s){System.out.println(s);}}public class Example4_28{public static void main(String args[]){ShowMessage sm;sm=new TV();sm.显示商标("长城牌电视机");sm=new PC();sm.显示商标("联想奔月5008PC");}}(3)求50以内的素数//Number.javapackage sushu;//将Number.java打包到文件夹sushu中public class Number{public void prn()//创建方法prn(){boolean flag ;for (int i=2;i<50;i++){flag = true ;//将flag初始化for (int j=2 ;j <= i/2 ; j++){ //只需对2到i/2之间取余,因为假如i/2到i有某个数x被i整除,则在2到i/2必定能找到一个数y(y*x=i)被i整除if (i%j == 0 ){flag = false ;break;//假如2到i/2有某个数被i整除,则跳出,执行下一次循环}}if (flag == true ){System.out.print(i+"\t");}//若flag为真,则i为素数,输出i的值}}}//Num.javaimport sushu.Number;//引用定义的包public class Num extends Number{public static void main(String args[]){Number num=new Number();num.prn();}}三、实验结果和数据处理(1)(2)(3)实验五数组与字符串一.实验目的(1)掌握一维数组的概念、定义和使用。
实验报告
课程名称计算机程序设计实验名称类与对象
系别电子信息科学学院专业班级12信管(4)指导教师邹丽新
学号_1姓名:实验日期2013/12/3 实验成绩___________
一、实验目的
1、掌握类的定义和使用方法,掌握类对象的声明和使用方法。
2、掌握对象的初始化和赋值的方法。
3、了解构造函数与析构函数的调用时机与顺序。
二、实验环境
1.硬件环境:微机
2.软件环境:Windows XP;Microsoft Visual C++6.0 集成开发环境。
三、实验内容
1、实验题目:构造一个TimeDate类,在类中包含一个成员函数,用来在屏幕上显示时间与日期。
(1) 基本要求
(a) 题目解析及要求:
1.定义TimeDate类,包含构造函数、析构函数和show成员函数(用于显示时间)。
2.要求在构造函数中增加以下代码:
cout<<"constructing TimeDate..."<<endl;
以便在实验中观察构造函数的调用。
3.要求在析造函数中增加以下代码:
cout<<"destructing TimeDate..."<<endl;
以便在实验中观察析造函数的调用。
4. 在程序中,当这个类对象被创建的时候,当前系统时间与系统日期被作为构造参数传递给它。
(b)提示:
1. 程序设计可建立在标准库time.h中的标准时间与日期函数来寻找与显示日期。
time.h文件中的time_t
结构包含时间与日期的所有信息。
2. 调用时间库函数time( )返回一个当前时间时期的time_t类型的数据,其输入参数是time_t的指针,
也可以用来接受当前时间日期的time_t数据。
当time函数的参数值为NULL时,其返回值为当前系统的日期与时间。
库函数ctime( )可将time_t数据转换成时间日期的字符串。
(2)实验代码
#include <iostream.h>
#include <ctime >
class TimeDate
{
public:
TimeDate()
{
cout<<"constructing TimeDate..."<<endl;
tm* dt;
time_t curr;
curr=(time(0));
dt=localtime(&curr);
year=dt->tm_year+1900;
mon=dt->tm_mon+1;
mday=dt->tm_mday;
h=dt->tm_hour;
m=dt->tm_min;
s=dt->tm_sec;
}
~TimeDate()
{
cout<<"destructing TimeDate..."<<endl;
}
void show()
{
cout<<year<<'-'<<mon<<'-'<<mday<<" "
<<h<<":"<<m<<":"<<s<<endl;;
}
private:
int year;
int mon;
int mday;
int h;
int m;
int s;
};
int main()
{
TimeDate curr;
curr.show();
return 0;
}
(3)实验结果
3、实验题目:编写程序,定义类Point,需要满足以下要求:
(1)定义构造函数,默认参数值为0,使得用户在main函数中能以如下方式定义对象。
void main( )
{
……
Point P1;
Point P2(1.3);
Point P3(1.3,5.6);
……
}
(2)重载函数Distance,该函数实现:求平面上两点之间的距离。
(3)定义成员函数Pint,实现输出点的坐标。
(1) 基本要求
(a) 题目解析及要求:
1.类Point适用于平面点,即坐标点由x轴与y轴构成。
2.重载成员函数Distance采用不同的方式求两点之间的距离。
一种方法是接收一个类的对象(求点
P1到点P2的距离),第二种方法是接收平面上一个点的坐标来求两点之间的距离(求点P1到点(1.3,
5.6)的距离)。
(b) 提示:
要用到库函数sqrt,因此需要头文件math.h。
函数原型:double sqrt(double x);
函数功能:对数值x开平方。
函数返回:返回数值x开平方的值。
由于编程时要用到这些函数,所以请在预编译行添加下列指令:
# include <math.h>
(c)测试数据:(下划线部分为输入数据,下同)
测试输入数据为题目要求(1)中的数值。
输出要求:
显示P1点坐标:
X=0 Y=0
显示P2点坐标:
X=1.3 Y=0
显示P3点坐标:
X=1.3 Y=5.6
P1点至P2点距离:1.3
P1点至点(1.3,5.6)的距离:5.74891
(2)实验代码
#include <iostream.h>
#include "math.h"
class point
{
public:
point(double xx, double yy)
{
x=xx;
y=yy;
}
void getxy( );
friend double distance(point &a, point &b);
private:
double x,y;
};
void point::getxy( )
{ cout<<"("<<x<<","<<y<<")"<<endl; }
double distance(point &a, point &b)
{ double dx=a.x-b.x;
double dy=a.y-b.y;
return sqrt(dx*dx+dy*dy); }
void main( )
{ point p1(0,0), p2(1.3,0),p3(1.3,5.6);
p1.getxy( );
p2.getxy( );
p3.getxy( );
double d1=distance(p1, p2);
double d2=distance(p1, p3);
cout<<" P1点至P2点距离:"<<d1<<endl;
cout<<"P1点至点(1.3,5.6)的距离:"<<d2<<endl; }
(3)实验结果
四、实验小结
1、实验出错情况及解决办法
实验中会遇到定义上的错误,以及格式/标点等上的疏忽和错误发现问题仔细检查,或是和同学们讨论,以便得到最简洁、高效的c++程序。
2、心得体会
C++是一门需要仔细/耐心学习的学科. 千万别心急,设计C++的class确实不容易;自己程序中的class和自己的class设计水平是在不断的编程实践中完善和发展的;每学到一个C++难点的时候,尝试着对别人讲解这个知识点并让他理解——你能讲清楚才说明你真的理解了;不可以浮躁,慢慢的琢磨才会做的更好!。