面向对象程序设计实验教学大纲.docx
- 文档编号:5591647
- 上传时间:2022-12-28
- 格式:DOCX
- 页数:41
- 大小:455.59KB
面向对象程序设计实验教学大纲.docx
《面向对象程序设计实验教学大纲.docx》由会员分享,可在线阅读,更多相关《面向对象程序设计实验教学大纲.docx(41页珍藏版)》请在冰豆网上搜索。
面向对象程序设计实验教学大纲
《面向对象程序设计》实验教学大纲
课程总学时:
64 学分:
4
实验学时:
16 实验个数:
6个实验学分:
1分
课程性质:
专业必修课适用专业:
计算机类专业
教材及参考书:
《C++语言程序设计(第四版)》,郑莉、董渊编著,北京:
清华大学出版社,2011
大纲执笔人:
大纲审定人:
一、实验课的性质与任务
本课程实验大纲是面向计算机专业学生开设的《C++程序设计》实验课计划指导大纲,是依据《面向对象程序设计》课程教学计划指导大纲编制。
本课程主要讲述了利用C++进行程序设计的思想和方法,既有面向过程和面向对象的程序设计的理论知识,又包括极强的实践应用能力的培养。
本实验大纲力求结合该课程教学计划大纲的相应内容,由浅入深的指导学生了解和掌握如何利用C++程序设计语言进行程序设计,提高学生的动手能力,做到理论和实践相结合,培养学生理解,分析程序,编写,调试程序的能力,使之能把程序设计应用到今后的专业学习中。
二、实验目的与要求
1.实验目的
通过本课程的学习,使学生掌握面向过程的程序设计思想和编程思路,初步掌握面向对象的程序设计思想,学会调试程序,能独立编写实用的小型程序。
2.实验要求
(1)学生应该自始至终贯彻课程中所介绍的程序设计风格,养成良好的编程习惯;
(2)应独立完成所布置习题。
为保证尽量在统一安排的上机时间内编译运行通过程序,学生应事先设计好程序。
三、实验项目及内容提要
面向对象程序设计实验课程(071016)
序号
实验编号
实验名称
学时
必做
选做
学分数
实验类型
内容提要
基本操作
验证
综合
设计
1
1
类与对象
4
√
√
函数重载,类的设计与使用
2
2
C++程序的结构
2
√
√
作用域与生存期,静态成员
3
3
数组、指针与字符串
4
√
√
三种常见编程元素的使用
4
4
继承与派生
2
√
√
派生类的设计与使用
5
5
多态性
2
√
√
运算符重载、动态多态
6
6
模板和文件
2
√
√
模板,异常处理机制的设计
四、实验内容安排:
实验一类与对象
(设计性实验4学时)
1.目的要求:
1)掌握类的定义和使用;掌握类对象的声明;练习具有不同访问属性的成员的访问方式;观察构造函数和析构函数的执行过程;
2)学习类组合使用方法;
3)使用VC++的debug调试功能观察程序流程,跟踪观察类的构造函数、析构函数、成员函数的执行顺序。
2.实验内容:
1)编写重载函数Max1可分别求取两个整数,三个整数,两个双精度数,三个双精度数的最大值。
#include
usingnamespacestd;
intMax1(inta,intb)//两个整形求最大值
{
intc;
c=(a>b)?
a:
b;
cout< returnc; } doubleMax1(doublea,doubleb)//两个双精度数求最大值 { doublec; c=(a>b)? a: b; cout< returnc; } intMax1(inta,intb,intc)//三个整形求最大值 { intd; d=(a>b)? ((a>c)? a: c): ((b>c)? b: c); cout< cout<<"\n"< returnd; } doubleMax1(doublea,doubleb,doublec)//三个双精度数求最大值 { doubled; d=(a>b)? ((a>c)? a: c): ((b>c)? b: c); cout< cout<<"\n"< returnd; } voidmain() { inta=1,b=8,c=12; doublea1=4.2,b1=1.8,c1=6.7; cout<<"原数为: \n"< cout<<"a="< cout<<"\n"< cout<<"a1="< cout<<"\n"< cout<<"(a,b)两个整形求最大值"< Max1(a,b); cout<<"\n"< cout<<"(a,b,c)三个整形求最大值"< Max1(a,b,c); cout<<"(a1,b1)两个双精度数求最大值"< Max1(a1,b1); cout<<"\n"< cout<<"(a1,b1,c1)三个双精度数求最大值"< Max1(a1,b1,c1); } 2)写一个函数,具有一个引用作为形参参数,在函数中改变引用变量的值,观察实参变量的变化。 #include usingnamespacestd; swap(int&x); voidmain() { inta; cout<<"pleaseinputanumber: a="; scanf("%d",&a); swap(a); cout<<"now: "; cout<<"a="< } swap(int&x) { cout<<"pleaseinputanumber: x="; scanf("%d",&x); returnx; } 3)定义一个CPU类,包含等级(Rank)、频率(frequency)、电压(voltage)等属性,有两个公有成员函数run、stop。 其中,rank为枚举类型CPU__Rank,定义为enumCPU_Rank{P1=1,P2,P3,P4,P5,P6,P7},frequency为单位是MHz的整型数,voltage为浮点型的电压值。 观察构造函数和析构函数的调用顺序。 第一种: #include usingnamespacestd; classCPU { public: intrun(); intstop(); CPU(intfrequency1,floatvoltage1) { cout<<"build! "< frequency=frequency1; voltage=voltage1; cout<<"frequency="< cout<<"voltage="< } ~CPU() { cout<<"destory! "< } private: intfrequency; floatvoltage; }; enumCPU_Rank{P1=1,P2,P3,P4,P5,P6,P7}; voidmain() { CPUa(3500,30); } 第二种: #include usingnamespacestd; classCPU { public: intrun(); intstop(); CPU(intfrequency1,floatvoltage1): frequency(frequency1),voltage(voltage1) { cout<<"build! "< cout<<"frequency="< cout<<"voltage="< } ~CPU() { cout<<"destory! "< } private: intfrequency; floatvoltage; }; enumCPU_Rank{P1=1,P2,P3,P4,P5,P6,P7}; voidmain() { intfrequency; floatvoltage; cout<<"frequenc="; cin>>frequency; cout<<"voltage="; cin>>voltage; CPUa(frequency,voltage); } 4)定义一个简单的Computer类,有数据成员芯片(cpu)、内存(ram)、光驱(cdrom)等等,有两个公有成员函数run、stop。 cpu为CPU类的一个对象,ram为RAM类的一个对象,cdrom为CDROM类的一个对象,定义并实现这个类,为以上的类编写构造和析构函数,观察组合类和内嵌类的构造函数和析构函数的调用顺序。 #include usingnamespacestd; classCPU{ public: CPU(){ cout<<"cpubuild! "< } ~CPU(){ cout<<"cpudestory! "< } }; classRAM{ public: RAM(){ cout<<"rambuild! "< } ~RAM(){ cout<<"ramdestory! "< } }; classCDROM{ public: CDROM(){ cout<<"cdrombuild! "< } ~CDROM(){ cout<<"cdromdestory! "< } }; classComputer{ private: CPUcpu; RAMram; CDROMcdrom; public: Computer(){ cout<<"Computerbuild! "< } ~Computer(){ cout<<"Computerdestory! "< } }; intmain(){ ComputerA; } 5)为题目2)的类编写复制构造函数,在主函数中利用复制构造的方式创建新的对象,观察对象的状态。 #include usingnamespacestd; classA { inta; public: A(inta1=0) { a=a1; } A(A&p); intgetA() { returna; } }; A: : A(A&p) { a=p.a; } voidmain() { Aa (2); cout<<"原本结果: "< Ab(a); cout<<"复制结果: "< } 6)思考并回答以下概念: 函数重载,引用,类,对象,数据成员,函数成员,访问属性,构造函数,析构函数,类的组合,内嵌对象,初始化列表,复制构造函数。 3.主要仪器设备及软件: PC+Windows2000+VC6.0 实验二C++程序的结构 (设计性实验2学时) 1.目的要求: 1)观察程序运行中变量的作用域、生存期和可见性; 2)学习类的静态成员的使用; 3)学习多文件结构在C++程序中的使用。 2.实验内容: 7)实现客户机(CLIENT)类。 定义字符型静态数据成员ServerName,保存其服务器名称;整型静态数据成员ClientNum,记录已定义的客户数量;定义静态函数ChangeServerName()改变服务器名称。 #include usingnamespacestd; classCLIENT { public: staticvoidChangeServerName()//静态函数ChangeServerName()改变服务器名称 { cout<<"theClientNum: ClientNum="< cout<<"theServerName: ServerName="< cout<<"changetheServerName: ServerName="; cin>>ServerName; cout<<"\n"< cout<<"nowtheServerName: ServerName="< } private: staticcharServerName;//字符型静态数据成员ServerName,保存其服务器名称 staticintClientNum;//整型静态数据成员ClientNum,记录已定义的客户数量 }; charCLIENT: : ServerName='t'; intCLIENT: : ClientNum=0; voidmain() { CLIENTA; CLIENT: : ChangeServerName(); } 8)利用多文件结构实现题目1),在头文件client.h中定义类,在文件client.cpp中实现该类,在文件test.cpp中测试这个类,观察相应的成员变量取值的变化情况,要求ClientNum能够实时记录客户机对象的数量。 在文件client.cpp中实现该类 #include"client.h" #include usingnamespacestd; charCLIENT: : ServerName='t'; intCLIENT: : ClientNum=0; voidCLIENT: : inputServerName()//静态函数ChangeServerName()改变服务器名称 { cout<<"inputtheServerName: ServerName="; cin>>ServerName; //cout<<"nowtheServerName: ServerName="< ClientNum++; cout<<"nowtheClientNum: ClientNum="< } CLIENT: : ~CLIENT() { ClientNum--; cout<<"nowtheClientNum: ClientNum="< } 在文件test.cpp中测试这个类 #include"client.h" #include usingnamespacestd; voidmain() { cout<<"begain! ! ! ! ! ! "< CLIENTA; CLIENT: : inputServerName(); CLIENTB; CLIENT: : inputServerName(); cout<<"end! ! ! ! ! ! "< } 在头文件client.h中定义类 classCLIENT { public: staticvoidinputServerName(); ~CLIENT(); private: staticcharServerName;//字符型静态数据成员ServerName,保存其服务器名称 staticintClientNum;//整型静态数据成员ClientNum,记录已定义的客户数量 }; 9)思考并回答以下概念: 类的静态数据成员,类的静态函数成员,多文件结构,文件包含。 3.主要仪器设备及软件: Windows2000+VC6.0 实验三数组、指针与字符串实验 (设计性实验4学时) 1.目的要求: 1)学习使用数组;学习字符串数据的组织和处理;学习标准C++库的使用; 2)掌握指针的使用方法;练习通过debug观察指针的内容及其所指的对象的内容;练习通过动态内存分配实现动态数组,并体会指针在其中的作用; 3)分别使用字符数组和标准C++库练习处理字符串的方法。 2.实验内容: 10)编写一个类用于处理3×3矩阵转置,测试转置的效果,输出转置前后的矩阵。 #include usingnamespacestd; classPoint { public: Point()//构造函数里赋值 { for(i=0;i<3;i++) { for(j=0;j<3;j++) { cin>>a[i][j]; } } } move()//转置 { for(i=0;i<3;i++) { for(j=0;j<3;j++) { b[i][j]=a[j][i]; } } } voidshow()//显示转置结果 { for(i=0;i<3;i++) { for(j=0;j<3;j++) { cout< } cout<<'\t'< } } private: inti;//行 intj;//列 inta[3][3];//原数组 intb[3][3];//转置数组 }; intmain() { inti,j; intx; cout<<"assignmentbegin! ! ! "< cout<<"Pleaseenterthevalues"< Pointa1; a1.move(); cout<<"result: "< a1.show(); return0; } 11)定义一个具有构造函数和析构函数的类,如实验一的CPU类,定义一个CPU的对象数组,观察构造函数的析构函数的调用过程。 #include usingnamespacestd; classCPU { public: CPU(intxx,intyy,inttt) { x=xx; y=yy; t=tt; cout< ! ! "< } ~CPU() { cout< ! ! "< } private: intx,y,t; }; intmain() { CPUcpu[3]={CPU(1,2,1),CPU(3,4,2),CPU(5,6,3)}; return0; } 12)利用动态内存分配的方式重新完成题目2)。 #include usingnamespacestd; classCPU { public: CPU(): x(0),y(0),t(0){cout<<"begain! ! ! "< CPU(intxx,intyy,inttt): x(xx),y(yy),t(tt){} voidmove(intxx,intyy,inttt) { x=xx; y=yy; t=tt; cout< ! ! "< } ~CPU() { cout< ! ! "< } private: intx,y,t; }; intmain() { CPU*p=newCPU[3]; p[0].move(1,2,1); p[1].move(3,4,2); p[2].move(5,6,3); cout<<"end! ! ! "< delete[]p; return0; } 13)使用系统提供的string类定义字符串对象并初始化,实现从原始字符串中提取一个子串。 #include #include usingnamespacestd; intmain() { inti,j; stringA="abcdefghijklnm"; stringB="123456789"; cout<<"A="< cout<<"起始位置: "; cin>>i; cout<<"元素个数: "; cin>>j; stringa=A.substr(i-1,j);//从位置三开始的九个字符
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 面向 对象 程序设计 实验教学 大纲