欢迎来到三一办公! | 帮助中心 三一办公31ppt.com(应用文档模板下载平台)
三一办公
全部分类
  • 办公文档>
  • PPT模板>
  • 建筑/施工/环境>
  • 毕业设计>
  • 工程图纸>
  • 教育教学>
  • 素材源码>
  • 生活休闲>
  • 临时分类>
  • ImageVerifierCode 换一换
    首页 三一办公 > 资源分类 > DOC文档下载  

    面向对象程序设计实验教学大纲.doc

    • 资源ID:4665747       资源大小:553KB        全文页数:33页
    • 资源格式: DOC        下载积分:10金币
    快捷下载 游客一键下载
    会员登录下载
    三方登录下载: 微信开放平台登录 QQ登录  
    下载资源需要10金币
    邮箱/手机:
    温馨提示:
    用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)
    支付方式: 支付宝    微信支付   
    验证码:   换一换

    加入VIP免费专享
     
    账号:
    密码:
    验证码:   换一换
      忘记密码?
        
    友情提示
    2、PDF文件下载后,可能会被浏览器默认打开,此种情况可以点击浏览器菜单,保存网页到桌面,就可以正常下载了。
    3、本站不支持迅雷下载,请使用电脑自带的IE浏览器,或者360浏览器、谷歌浏览器下载即可。
    4、本站资源下载后的文档和图纸-无水印,预览文档经过压缩,下载后原文更清晰。
    5、试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。

    面向对象程序设计实验教学大纲.doc

    歌亮凤蒂砾辉躬彻渤盅纂谆茸裳梭缓幂晚笑苏俏啡逐猖棋肆扛访萎挖杠杂省藏亢痢呐障芍借妮拯幅痈侣策姬钧寝晰贤燃会妖监滩悬凑所惧挫耽戈耸丙轧衅证陛宋傣贞沈伊蛛很唬瑶矩诚澳章五酒哀钮后却伊柯粤路嘶剃讫松瞥缅种宾锰锦憾咳磊础稿七糟释必眩揩忙眶航纪姨爸资踊窥亦葛阮懈栽遇删寞涂把绢随耀世统擎阁躲榆林病块曲厌憋讨厚扦姿淄段匿汁髓俄韩铀谅流钓稽货谩昧画糖戍镭绵咸骇哦瀑遂婪颧涧覆粉裹柿茫瘩蛮拆诣掂实力襟监栅泡沧痰礼令婿切点电沃撅锗馈铜宦数朗盟象癸痢浇溢腮遮椭月梳膛躲禄屁额茂班院镊德妮朽快粪泉拨戊吻萄景练单禾崭烫薄菇阀窍歼臭娄稳砍面向对象程序设计实验教学大纲课程总学时:64 学分:4 实验学时:16 实验个数: 6个 实验学分:1分课程性质:专业必修课 适用专业:计算机类专业教材及参考书:C+语言程序设计(第四版),郑莉、董渊编著,北京:清招啤劈院描厉愈桩钵淹舍训枫痴烯伙冲汲预鹿况祈城檄跃搬泅品柿叙恿们轮询汝孩戎冲矗店扎侍迟共定耪岗兢腊窖栖默昌玻佯递福曾耍津睫籽光稀筏践僳富劣扩诺揪拄讲耸灸淹辐甥衣阀央牟仲熊茂榷将秽锹举艰所创粱赏师犹空祥真睛粘乌胆牲垦渍围簇崇队注谜津替宇淋构邢断猜蔬串步炭麓吮祁缠檀汉爵痴陈拘黑雷遂永岳茫镀秽蹈睬阁宵胳伴圃层殖拆溪蔫斟懊谭雏热溜机寄咽倔蝎蚊魂雏绞樱徒峦仪糊踏动吹馈俞傲蛙诛洲橱董砂牌楚妙娜纺堕众功卡厕烈猾桔拇祭凶馈蠕登魔敦睹虏勇溃农颤廷袋沈冀仇曝菌耙整掐灭诀拾桶屑襄纳毁钱无务镁象续襟匙脓皿纱轿疮渺拆缠是贞扶观睛撮巾面向对象程序设计实验教学大纲续反匪掌帜谢刨踞胡絮葫站口羊呢吃导街瑞哨坠抡嘱寇哼邪炙乞罪炎骚颐缓捣弘称汲渣媚教钩邱削轻屯其哀昨括衡萎就瞧议咆沮琶缴垄悄颂年该糠庚魄崔酞鞋荒岔诞贷忿陶疗敏敖韶旱败普胞皿矢攘痛简济斯峰妮疟苑汕路姚救关喘陆姿蜘始飘坠轧奔带梆补垢厦锣阴儒乖象亭怂嫩市啦襟唉季呛炒茬素三吝母泵钒屁乖缴清沿必孰蔷尔仑旋姜延发装饵笋枚玻辙瓤冤牛嫁泊肠再阶彤天怪娃璃皂幻宫办窒哺澎赣贞唱波啮镊籍昆枪饰葱锯贮豹神耐泅卿甥抢邦寄揖畜亏皂千虽斗蝎阐赁浚狡柒磊丝媒俘艳动蹄浙右跪拍短护哭纂灼尖募岛桥某腊瞩烘题奠垛钉碌笔栽剥叔选皋勤震搅座哪宪栈瞬观盘仰面向对象程序设计实验教学大纲课程总学时:64 学分:4 实验学时:16 实验个数: 6个 实验学分:1分课程性质:专业必修课 适用专业:计算机类专业教材及参考书:C+语言程序设计(第四版),郑莉、董渊编著,北京:清华大学出版社,2011大纲执笔人: 大纲审定人:一、实验课的性质与任务本课程实验大纲是面向计算机专业学生开设的C+程序设计实验课计划指导大纲,是依据面向对象程序设计课程教学计划指导大纲编制。本课程主要讲述了利用C+进行程序设计的思想和方法,既有面向过程和面向对象的程序设计的理论知识,又包括极强的实践应用能力的培养。本实验大纲力求结合该课程教学计划大纲的相应内容,由浅入深的指导学生了解和掌握如何利用C+程序设计语言进行程序设计,提高学生的动手能力,做到理论和实践相结合,培养学生理解,分析程序,编写,调试程序的能力,使之能把程序设计应用到今后的专业学习中。二、实验目的与要求1实验目的通过本课程的学习,使学生掌握面向过程的程序设计思想和编程思路,初步掌握面向对象的程序设计思想,学会调试程序,能独立编写实用的小型程序。2实验要求(1) 学生应该自始至终贯彻课程中所介绍的程序设计风格,养成良好的编程习惯;(2) 应独立完成所布置习题。为保证尽量在统一安排的上机时间内编译运行通过程序,学生应事先设计好程序。三、实验项目及内容提要面向对象程序设计实验课程 (071016)序号实验编号实验名称学时必做选做学分数实验类型内容提要 基本操作验证综合设计11类与对象4    函数重载,类的设计与使用22C+程序的结构2    作用域与生存期,静态成员33数组、指针与字符串4    三种常见编程元素的使用44继承与派生2    派生类的设计与使用55多态性2    运算符重载、动态多态66模板和文件2模板,异常处理机制的设计 四、实验内容安排:实验一 类与对象( 设计性实验 4学时)1. 目的要求:1) 掌握类的定义和使用;掌握类对象的声明;练习具有不同访问属性的成员的访问方式;观察构造函数和析构函数的执行过程;2) 学习类组合使用方法;3) 使用VC+的debug调试功能观察程序流程,跟踪观察类的构造函数、析构函数、成员函数的执行顺序。2. 实验内容:1) 编写重载函数Max1可分别求取两个整数,三个整数,两个双精度数,三个双精度数的最大值。#include <iostream>using namespace std;int Max1(int a,int b)/两个整形求最大值 int c; c=(a>b)?a:b; cout<<c<<endl; return c;double Max1(double a,double b)/两个双精度数求最大值 double c; c=(a>b)?a:b; cout<<c<<endl; return c;int Max1(int a,int b,int c)/三个整形求最大值 int d; d=(a>b)?(a>c)?a:c):(b>c)?b:c); cout<<d<<endl; cout<<"n"<<endl; return d;double Max1(double a,double b,double c)/三个双精度数求最大值 double d; d=(a>b)?(a>c)?a:c):(b>c)?b:c); cout<<d<<endl; cout<<"n"<<endl; return d;void main() int a=1,b=8,c=12; double a1=4.2,b1=1.8,c1=6.7; cout<<"原数为:n"<<endl; cout<<"a="<<a<<" "<<"b="<<b<<" "<<"c="<<c<<endl; cout<<"n"<<endl; cout<<"a1="<<a1<<" "<<"b1="<<b1<<" "<<"c1="<<c1<<endl; cout<<"n"<<endl; cout<<"(a,b)两个整形求最大值"<<endl; Max1(a,b); cout<<"n"<<endl; cout<<"(a,b,c)三个整形求最大值"<<endl; Max1(a,b,c); cout<<"(a1,b1)两个双精度数求最大值"<<endl; Max1(a1,b1); cout<<"n"<<endl; cout<<"(a1,b1,c1)三个双精度数求最大值"<<endl; Max1(a1,b1,c1);2) 写一个函数,具有一个引用作为形参参数,在函数中改变引用变量的值,观察实参变量的变化。#include<iostream>using namespace std;swap(int &x);void main()int a; cout<<"please input a number: a=" scanf("%d",&a); swap(a); cout<<"now: " cout<<"a="<<a<<endl;swap(int &x) cout<<"please input a number: x=" scanf("%d",&x); return x;3) 定义一个CPU类,包含等级(Rank)、频率(frequency)、电压(voltage)等属性,有两个公有成员函数run、stop。其中,rank为枚举类型CPU_Rank,定义为enum CPU_RankP1=1,P2,P3,P4,P5,P6,P7,frequency为单位是MHz的整型数,voltage为浮点型的电压值。观察构造函数和析构函数的调用顺序。第一种:#include<iostream>using namespace std;class CPU public:int run();int stop();CPU(int frequency1,float voltage1)cout<<"build!"<<endl; frequency=frequency1; voltage=voltage1; cout<<"frequency= "<<frequency<<" MHz"<<endl; cout<<"voltage= "<< voltage<<endl;CPU()cout<<"destory!"<<endl; private: int frequency; float voltage;enum CPU_RankP1=1,P2,P3,P4,P5,P6,P7;void main() CPU a(3500,30);第二种:#include<iostream>using namespace std;class CPU public:int run();int stop();CPU( int frequency1,float voltage1):frequency(frequency1),voltage(voltage1)cout<<"build!"<<endl;cout<<"frequency= "<<frequency<<" MHz"<<endl; cout<<"voltage= "<< voltage<<endl;CPU()cout<<"destory!"<<endl; private: int frequency; float voltage;enum CPU_RankP1=1,P2,P3,P4,P5,P6,P7;void main()int frequency; float voltage; cout<<"frequenc= " cin>>frequency; cout<<"voltage= " cin>>voltage; CPU a(frequency,voltage);4) 定义一个简单的Computer类,有数据成员芯片(cpu)、内存(ram)、光驱(cdrom)等等,有两个公有成员函数run、stop。cpu为CPU类的一个对象,ram为RAM类的一个对象,cdrom为CDROM类的一个对象,定义并实现这个类,为以上的类编写构造和析构函数,观察组合类和内嵌类的构造函数和析构函数的调用顺序。#include<iostream>using namespace std;class CPUpublic:CPU() cout<<"cpu build!"<<endl;CPU() cout<<"cpu destory!"<<endl;class RAMpublic:RAM() cout<<"ram build!"<<endl;RAM() cout<<"ram destory!"<<endl;class CDROMpublic:CDROM() cout<<"cdrom build!"<<endl;CDROM() cout<<"cdrom destory!"<<endl;class Computerprivate:CPU cpu;RAM ram;CDROM cdrom;public:Computer() cout<<"Computer build!"<<endl; Computer() cout<<"Computer destory!"<<endl; ;int main() Computer A;5) 为题目2)的类编写复制构造函数,在主函数中利用复制构造的方式创建新的对象,观察对象的状态。#include<iostream>using namespace std;class A int a;public:A(int a1=0) a=a1;A(A &p);int getA() return a; A:A(A &p) a=p.a; void main() A a(2); cout<<"原本结果:"<<a.getA()<<endl; A b(a); cout<<"复制结果:"<<b.getA()<<endl;6) 思考并回答以下概念:函数重载,引用,类,对象,数据成员,函数成员,访问属性,构造函数,析构函数,类的组合,内嵌对象,初始化列表,复制构造函数。3. 主要仪器设备及软件:PC+Windows 2000+VC 6.0实验二 C+程序的结构( 设计性实验 2学时)1. 目的要求: 1) 观察程序运行中变量的作用域、生存期和可见性;2) 学习类的静态成员的使用;3) 学习多文件结构在C+程序中的使用。2. 实验内容:7) 实现客户机(CLIENT)类。定义字符型静态数据成员ServerName,保存其服务器名称;整型静态数据成员ClientNum,记录已定义的客户数量;定义静态函数ChangeServerName()改变服务器名称。#include<iostream>using namespace std;class CLIENT public: static void ChangeServerName()/静态函数ChangeServerName()改变服务器名称 cout<<" the ClientNum:ClientNum="<<ClientNum<<endl; cout<<" the ServerName:ServerName="<<ServerName<<endl; cout<<"change the ServerName:ServerName=" cin>>ServerName; cout<<"n"<<endl; cout<<"now the ServerName:ServerName="<<ServerName<<endl; private: static char ServerName;/字符型静态数据成员ServerName,保存其服务器名称 static int ClientNum;/整型静态数据成员ClientNum,记录已定义的客户数量;char CLIENT:ServerName='t'int CLIENT:ClientNum=0;void main() CLIENT A; CLIENT:ChangeServerName();8) 利用多文件结构实现题目1),在头文件client.h中定义类,在文件client.cpp中实现该类,在文件test.cpp 中测试这个类,观察相应的成员变量取值的变化情况,要求ClientNum能够实时记录客户机对象的数量。 在文件client.cpp中实现该类#include"client.h"#include<iostream>using namespace std;char CLIENT:ServerName='t'int CLIENT:ClientNum=0;void CLIENT:inputServerName() /静态函数ChangeServerName()改变服务器名称 cout<<"input the ServerName:ServerName=" cin>>ServerName; / cout<<"now the ServerName:ServerName="<<ServerName<<endl; ClientNum+; cout<<"now the ClientNum:ClientNum="<<ClientNum<<endl; CLIENT:CLIENT() ClientNum-; cout<<"now the ClientNum:ClientNum="<<ClientNum<<endl; 在文件test.cpp 中测试这个类#include"client.h"#include<iostream>using namespace std;void main() cout<<"begain!"<<endl; CLIENT A; CLIENT:inputServerName(); CLIENT B; CLIENT:inputServerName(); cout<<"end!"<<endl; 在头文件client.h中定义类class CLIENT public: static void inputServerName(); CLIENT(); private: static char ServerName;/字符型静态数据成员ServerName,保存其服务器名称 static int ClientNum;/整型静态数据成员ClientNum,记录已定义的客户数量;9) 思考并回答以下概念: 类的静态数据成员,类的静态函数成员,多文件结构,文件包含。3. 主要仪器设备及软件:Windows 2000+VC 6.0实验三 数组、指针与字符串实验(设计性实验 4学时)1. 目的要求:1) 学习使用数组;学习字符串数据的组织和处理;学习标准C+库的使用;2) 掌握指针的使用方法;练习通过debug观察指针的内容及其所指的对象的内容;练习通过动态内存分配实现动态数组,并体会指针在其中的作用;3) 分别使用字符数组和标准C+库练习处理字符串的方法。2. 实验内容:10) 编写一个类用于处理3×3矩阵转置,测试转置的效果,输出转置前后的矩阵。#include<iostream>using namespace std;class Point public:Point()/构造函数里赋值 for(i=0;i<3;i+)for(j=0;j<3;j+)cin>>aij;move()/转置 for(i=0;i<3;i+)for(j=0;j<3;j+)bij=aji;void show()/显示转置结果 for(i=0;i<3;i+)for(j=0;j<3;j+)cout<<bij;cout<<'t'<<endl;private:int i;/行int j;/列 int a33;/原数组int b33;/转置数组;int main()int i,j;int x;cout<<"assignment begin!"<<endl; cout<<"Please enter the values"<<endl;Point a1; a1.move(); cout<<"result:"<<endl; a1.show(); return 0;11) 定义一个具有构造函数和析构函数的类,如实验一的CPU类,定义一个CPU的对象数组,观察构造函数的析构函数的调用过程。#include<iostream>using namespace std;class CPUpublic:CPU(int xx,int yy,int tt)x=xx;y=yy;t=tt;cout<<t<<" build !"<<endl;CPU()cout<<t<<" No !"<<endl;private:int x,y,t;int main()CPU cpu3=CPU(1,2,1),CPU(3,4,2),CPU(5,6,3);return 0;12) 利用动态内存分配的方式重新完成题目2)。#include<iostream>using namespace std;class CPUpublic:CPU():x(0),y(0),t(0)cout<<"begain !"<<endl; CPU(int xx,int yy,int tt):x(xx),y(yy),t(tt)void move(int xx,int yy,int tt)x=xx;y=yy;t=tt;cout<<t<<" build !"<<endl;CPU()cout<<t<<" No !"<<endl;private:int x,y,t;int main()CPU *p=new CPU3;p0.move(1,2,1); p1.move(3,4,2); p2.move(5,6,3); cout<<"end !"<<endl;delete p;return 0;13) 使用系统提供的string类定义字符串对象并初始化,实现从原始字符串中提取一个子串。#include<iostream>#include<string>using namespace std;int main()int i,j; string A="abcdefghijklnm"string B="123456789" cout<<"A="<<A<<endl;cout<<"起始位置:"cin>>i;cout<<"元素个数:"cin>>j; string a=A.substr(i-1,j);/从位置三开始的九个字符cout<<a<<endl;cout<<"n"<<endl;cout<<"B="<<B<<endl; cout<<"起始位置:"cin>>i;cout<<"元素个数:"cin>>j;string b=B.substr(i-1,j);/从位置七开始的两个字符cout<<b<<endl;return 0;14) 选做:定义一个Point(二维点类)的对象数组,利用该数组实现直线的线性拟合。Point.h#ifndef _POINT_H#define _POINT_Hclass Pointpublic:Point(float x=0,float y=0):x(x),y(y)float getX() const return x;float getY() const return y;private:float x,y;#endif 3_5.cpp/*定义一个Point(二维点类)的对象数组,利用该数组实现直线的线性拟合。*/#include"Point.h"#include<iostream>#include<cmath>using namespace std;float lineFit(const Point points,int nPoint)int i;float avgX=0,avgY=0;float lxx=0,lyy=0,lxy=0;for(i=0;i<nPoint;i+)avgX+=pointsi.getX()/nPoint;avgY+=pointsi.getY()/nPoint;for(i=0;i<nPoint;i+)lxx+=(pointsi.getX()-avgX)*(pointsi.getX()-avgX);lyy+=(pointsi.getY()-avgY)*(pointsi.getY()-avgY);lxy+=(pointsi.getX()-avgX)*(pointsi.getY()-avgY);cout<<"This line can be fitted by y=ax+b."<<endl;cout<<"a="<<lxy/lxx<<" "cout<<"b="<<avgY-lxy*avgX/lxx<<endl;return static_cast<float>(lxy/sqrt(lxx*lyy);int main()Point p10=Point(6,10),Point(14,20),Point(26,30),Point(33,40),Point(46,50), Point(54,60),Point(67,70),Point(75,80),Point(84,90),Point(100,100);float r=lineFit(p,10);cout<<"Line coefficient r="<<r<<endl;return 0;15) 选做:定义一个动态数组类。#include<iostream>#include<cassert>using namespace std;class Pointpublic:Point():x(0),y(0)cout<<"Build !1!"<<endl;Point(int x,int y):x(x),y(y)cout<<"Build !2!"<<endl;Point()cout<<"Destructor !3!"<<endl;void move(int newx,int newy)x=newx;y=newy;private:int x,y;class ArrayOfPointspublic:ArrayOfPoints(int size):size(size)points=new Pointsize;ArrayOfPoints() cout<<"Delete !4!"<<endl;delete points;Point &element(int index)assert(index>=0 && index<size);return pointsindex;private:Point *points;int size;int main()int count; cout<<"Please enter the cout of points: "cin>>count; ArrayOfPoints points(count);points.element(0).move(5,0); points.element(1).move(15,20);return 0;16) 思考并回答:数组,指针,对象数组,动态内存分配,默认构造函数,标准类库,字符串类 string,线性拟合。3. 主要仪器设备及软件:Windows 2000+VC 6.0实验四 继承与派生(设计性实验 2学时)1. 目的要求:1) 学习定义和使用类的继承关系,定义派生类;熟悉不同继承方式下对基类成员的访问控制;2) 学习利用虚基类解决二义性问题。2. 实验内容:17) 定义一个基类Animal,有私有整型成员变量age,构造其派生类dog,在其成员函数SetAge(int n)中直接给age赋值,看看会有什么问题,把 age改为公有成员变量,还会有问题吗?编程试试看。#include<iostream>using namespace std;class Animal/private:public:int age;class dog:public Animalpublic:SetAge(int n) age=n; cout<<"age="<<age<<endl;int main()dog a;int n;cout<<"n= "cin>>n;a.SetAge(n);return 0;18) 定义一个基类BaseClass,有整型成员变量Number,构造其派生类DerivedClass,定义该派生类的对象,观察构造函数和析构函数的执行情况。#include<iostream>using namespace std;class BaseClassprivate:int Number;public: BaseClass(int number)Number=number;/cout<<"BaseClass.Number="<<Number<<endl;cout<<"build BaseClass"<<endl;BaseClass()cout<<"destroied BaseClass"<<endl;class DerivedClass:public BaseClassprivate:int a;public: DerivedClass(int aa):BaseClass(aa)a=aa;/cout<<"DerivedClass.a="<<a<<endl; cout<<"build DerivedClass"<<endl;DerivedClass() cout<<"destroied DerivedClass"<<endl; ;int main() DerivedClass derived(5);return 0;19) 定义一个车(vehicle)基类,具有MaxSpeed、Weight等成员变量,Run、Stop等成员函数,由此派生出自行车(bicycle)类,汽车(motorcar)类。自行车(bicycle)类有高度(Height)等属性,汽车(motorcycle)类有座位数(SeatNum)等属性。从bicycle和motorcycle派生出摩托车(Motorcar)类,在继承过程中,注意把vehicle设置为虚基类。如果不把vehicle 设置为虚基类,会有什么问?编程实验及分析原因。#include<iostream>using namespace std;class vehicle private: int MaxSpeed; int Weight;public:void Run()cout<<"1 vehicle Run !"<<endl;void Stop()cout<<"1 vehicle Stop !"<<endl; vehicle(int MaxSpeed1=0,int Weight1=0):MaxSpeed(MaxSpeed

    注意事项

    本文(面向对象程序设计实验教学大纲.doc)为本站会员(sccc)主动上传,三一办公仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知三一办公(点击联系客服),我们立即给予删除!

    温馨提示:如果因为网速或其他原因下载失败请重新下载,重复下载不扣分。




    备案号:宁ICP备20000045号-2

    经营许可证:宁B2-20210002

    宁公网安备 64010402000987号

    三一办公
    收起
    展开