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

上传人:b****6 文档编号:5591647 上传时间:2022-12-28 格式:DOCX 页数:41 大小:455.59KB
下载 相关 举报
面向对象程序设计实验教学大纲.docx_第1页
第1页 / 共41页
面向对象程序设计实验教学大纲.docx_第2页
第2页 / 共41页
面向对象程序设计实验教学大纲.docx_第3页
第3页 / 共41页
面向对象程序设计实验教学大纲.docx_第4页
第4页 / 共41页
面向对象程序设计实验教学大纲.docx_第5页
第5页 / 共41页
点击查看更多>>
下载资源
资源描述

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

《面向对象程序设计实验教学大纲.docx》由会员分享,可在线阅读,更多相关《面向对象程序设计实验教学大纲.docx(41页珍藏版)》请在冰豆网上搜索。

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

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

《面向对象程序设计》实验教学大纲

课程总学时:

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);//从位置三开始的九个字符

cout<

cout<<"\n"<

cout<<"B="<

cout<<"起始位置:

";

cin>>i;

cout<<"元素个数:

";

cin>>j;

stringb=B.substr(i-1,j);//从位置七开始的两个字符

cout<

return0;

}

14)选做:

定义一个Point(二维点类)的对象数组,利用该数组实现直线的线性拟合。

Point.h

#ifndef_POINT_H

#define_POINT_H

classPoint

{

public:

Point(floatx=0,floaty=0):

x(x),y(y){}

floatgetX()const{returnx;}

floatgetY()const{returny;}

private:

floatx,y;

};

#endif

3_5.cpp

/*定义一个Point(二维点类)的对象数组,利用该数组实现直线的线性拟合。

*/

#include"Point.h"

#include

#include

usingnamespacestd;

floatlineFit(constPointpoints[],intnPoint)

{

inti;

floatavgX=0,avgY=0;

floatlxx=0,lyy=0,lxy=0;

for(i=0;i

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 小学教育 > 语文

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1