C++面向对象程序设计实验内容.docx

上传人:b****5 文档编号:12358024 上传时间:2023-04-18 格式:DOCX 页数:23 大小:29.42KB
下载 相关 举报
C++面向对象程序设计实验内容.docx_第1页
第1页 / 共23页
C++面向对象程序设计实验内容.docx_第2页
第2页 / 共23页
C++面向对象程序设计实验内容.docx_第3页
第3页 / 共23页
C++面向对象程序设计实验内容.docx_第4页
第4页 / 共23页
C++面向对象程序设计实验内容.docx_第5页
第5页 / 共23页
点击查看更多>>
下载资源
资源描述

C++面向对象程序设计实验内容.docx

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

C++面向对象程序设计实验内容.docx

C++面向对象程序设计实验内容

《C++面向对象程序设计》实验内容

总学时:

24学时

实验1C++程序设计初步

1、实验目的

(1)了解在C++编译系统(VisualC++6.0)上如何编辑、编译、连接和运行一个C++程序。

(2)通过运行简单的C++程序,初步了解C++源程序的结构和特点。

(3)掌握简单C++程序的编写和调试方法。

(4)掌握重载函数的定义方法。

(5)能正确使用引用型变量。

2、实验内容和步骤

(1)在VisualC++环境下编译和运行C++程序

①先进入VisualC++6.0环境。

②在自己指定的子目录中建立一个名为test.cpp的新文件。

③从键盘输入以下程序

intmain()

{

inta,b;

c=a+b;

cout>>“a+b=”>>a+b;

}

选择Build→Compiletest.cpp命令,对此源程序进行编译。

观察和分析编译信息。

⑤根据编译信息指出的错误,修改程序。

再进行编译,如果还有错,再重复此过程,直到编译不出错为止。

⑥选择Build→Buildtest.exe命令,对程序进行连接,如果不出错,就会生成可执行程序test.exe。

⑦选择Build→Executetest.exe命令,执行可执行程序test.exe。

观察屏幕的变化。

在输出窗口应显示程序运行结果。

⑧分析结果是否正确,如果不正确或认为输出格式不理想,可以修改程序,然后重新执行以上④和⑧步骤。

(2)编一个程序,用同一个函数名对n个数据进行从小到大排序,数据类型可以是整型、单精度型、双精度型。

用重载函数实现。

(3)对3个变量按由小到大顺序排序,要求使用变量的引用。

学时数:

2学时

实验2类和对象

(一)

1、实验目的

(1)掌握声明类的方法,类和类的成员的的概念以及定义对象的方法。

(2)初步掌握用类和对象编制基于对象的程序。

(3)学习检查和调试基于对象的程序。

2、实验内容

(1)有以下程序:

#include

usingnamespacestd;

classTime//定义Time类

{public:

//数据成员为公用的

inthour;

intminute;

intsec;

};

intmain()

{Timet1;//定义t1为Time类对象

cin>>t1.hour;//输入设定的时间

cin>>t1.minute;

cin>>t1.sec;

cout<

”<

”<

return0;

}

改写程序,要求:

①将数据成员改为私有的;

②将输入和输出的功能改为由成员函数实现;

③在类体内定义成员函数。

然后编译和运行程序。

请分析什么成员应指定为公用的?

什么成员应指定为私有的?

什么函数最好放在类中定义?

什么函数最好放在类外定义?

(2)分别给出如下的3个文件:

①含类定义的头文件student.h,

(这是头文件,在此文件中进行类的声明)

classStudent//类声明

{public:

voiddisplay();//公用成员函数原型声明

private:

intnum;

charname[20];

charsex;

};

//在此文件中进行函数的定义

#include

#include“”//不要漏写此行,否则编译通不过

voidStudent:

:

display()//在类外定义display类函数

{cout<<“num:

”<

cout<<“name:

”<

cout<<“sex:

”<

}

③。

为了组成一个完整的源程序,应当有包括主函数的源文件:

主函数模块

#include

#include“”//将类声明头文件包含进来

intmain()

{Studentstud;//定义对象

stud.display();//执行stud对象的display函数

return0;

}

请完善该程序,在类中增加一个对数据成员赋初值的成员函数set_value。

上机调试并运行。

(3)需要求3个长方柱的体积,请编一个基于对象的程序。

数据成员包括length(长)、width(宽)、height(高)。

要求用成员函数实现以下功能:

①由键盘分别输入3个长方柱的长、宽、高;

②计算长方柱的体积;

③输出3个长方柱的体积。

请编程序,上机调试并运行。

学时数:

2学时

实验3类和对象

(二)

1、实验目的

(1)进一步加深对类和对象的理解。

(2)掌握类的构造函数和析构函数的概念和使用方法。

(3)掌握对对象数组、对象的指针及其使用方法。

(4)掌握友元的概念和使用。

(5)了解类模板的使用方法。

2、实验内容

(1)有以下程序

#include

classStudent

{public:

Student(intn,floats):

num(n),score(s){}

voidchange(intn,floats){num=n;score=s;}

voiddisplay(){cout<

private:

intnum;

floatscore;

};

voidmain()

{Studentstud(101,78.5);

stud.display();

stud.change(101,80.5);

stud.display();

}

①阅读此程序,分析其执行过程,然后上机运行,对比输出结果。

②修改上面的程序,增加一个fun函数,改写main函数。

在main函数中调用fun函数,在fun函数中调用change和display函数。

在fun函数中使用对象的引用(Student&)作为形参。

(2)商店销售某一商品,商店每天公布统一的折扣(discount)。

同时允许销售人员在销售时灵活掌握售价(price),在此基础上,对一次购10件以上者,还可以享受9.8折优惠。

现已知当天3个销售员销售情况为

销货员号(num)销货件数(quantity)销货单价(price)

1015

 

请编程序,计算出当日此商品的总销售款sum以及每件商品的平均售价。

要求用静态数据成员和静态成员函数。

(提示:

将折扣discount,总销售款sum和商品销售总件数n声明为静态数据成员,再定义静态成员函数average(求平均售价)和display(输出结果)。

(3)有以下程序:

#include

usingnamespacestd;

classDate;//对Date类的提前引用声明

classTime//定义Time类

{public:

Time(int,int,int);

voiddisplay(Date&);//display是成员函数,形参是Date类对象的引用

private:

inthour;

intminute;

intsec;

};

classDate//声明Date类

{public:

Date(int,int,int);

friendvoidTime∷display(Date&);//声明Time中的display函数为友元成员函数

private:

intmonth;

intday;

intyear;

};

Time∷Time(inth,intm,ints)//类Time的构造函数

{hour=h;

minute=m;

sec=s;

}

voidTime∷display(Date&d)//display的作用是输出年、月、日和时、分、秒

{cout<

cout<

”<

”<

}

Date∷Date(intm,intd,inty)//类Date的构造函数

{month=m;

day=d;

year=y;

}

intmain()

{Timet1(10,13,56);//定义Time类对象t1

Dated1(12,25,2004);//定义Date类对象d1

t1.display(d1);//调用t1中的display函数,实参是Date类对象d1

return0;

}

请读者分析和运行此程序,注意友元函数Time:

:

display的作用。

将程序中的display函数不放在Time类中,而作为类外的普通函数,然后分别在Time和Date类中将display声明为友元函数。

在主函数中调用display函数,display函数分别引用Time和Date两个类的对象的私有数据,输出年、月、日和时、分、秒。

修改后上机调试和运行。

(4)有以下使用类模板程序:

#include

usingnamespacestd;

template//定义类模板

classCompare

{public:

Compare(numtypea,numtypeb)

{x=a;y=b;}

numtypemax()

{return(x>y)?

x:

y;}

numtypemin()

{return(x

x:

y;}

private:

numtypex,y;

};

intmain()

{Comparecmp1(3,7);//定义对象cmp1,用于两个整数的比较

cout<

cout<

Comparecmp2(45.78,93.6);//定义对象cmp2,用于两个浮点数的比较

cout<

cout<

Comparecmp3(′a′,′A′);//定义对象cmp3,用于两个字符的比较

cout<

cout<

return0;

}

①运行此程序,体会类模板的作用。

②将它改写为在类模板外定义各成员函数。

学时数:

2学时

实验4运算符重载

1、实验目的

(1)进一步了解运算符重载的概念和使用方法。

(2)掌握几种常用的运算符重载的方法。

(3)了解转换构造函数的使用方法。

(4)了解在VisualC++6.0环境下进行运算符重载要注意的问题。

2、实验内容

事先编写好程序,上机调试和运行程序,分析结果。

(1)声明一个复数类Complex,重载运算符“+”、“-”、“*”、“/”,使之能用于复数的加、减、乘、除,运算符重载函数作为Complex类的成员函数。

编程序,分别求两个复数之和、差、积和商。

请思考:

你编的程序能否用于一个整数与一个复数的算术运算?

如4+(5-2i)

(2)声明一个复数类Complex,重载运算符“+”,使之能用于复数的加法运算。

参加运算的两个运算量可以都是类对象,也可以其中有一个是整数,顺序任意。

例如:

c1+c2,i+c1,c1+i,均合法(设i为整数,c1,c2为复数)。

运行程序,分别求两个复数之和、整数和复数之和。

(3)有两个矩阵a和b,均为2行3列。

求两个矩阵之和。

重载运算符“+”,使之能用于矩阵相加。

如c=a+b。

如c=a+b。

(4)声明一个Teacher(教师)类和一个Student(学生)类,二者有一部分数据成员是相同的,例如num(号码),name(姓名),sex(性别).。

编写程序,将一个Student对象(学生)转换为Teacher(教师)类,只将以上3个相同的数据成员移植过去。

可以设想为:

一位大学生大学毕业了,留校担任教师,他原有的部分数据对现在的教师身份来说仍然是有用的,应当保留并成为其教师的一部分。

学时数:

2学时

实验5:

继承和派生

1、实验目的

(1)了解继承在面向对象程序设计中的重要作用。

(2)进一步理解继承与派生的概念。

(3)掌握通过继承派生出一个新的类的方法。

(4)了解虚基类的作用和用法。

2、实验内容

事先编写好程序,上机调试和运行程序,分析结果。

(1)有如下类定义:

classStudent//声明基类

{public:

//基类公用成员

voidget_value()

{cin>>num>>name>>sex;}

voiddisplay()

{cout<<“num:

”<

cout<<“name:

”<

cout<<“sex:

”<

private:

//基类私有成员

intnum;

stringname;

charsex;

};

classStudent1:

publicStudent//以public方式声明派生类Student1

{public:

voiddisplay_1()

{cout<<“num:

”<

cout<<“name:

”<

cout<<“sex:

”<

cout<<“age:

”<

cout<<“address:

”<

private:

intage;

stringaddr;

};

将程序片段补充和改写成一个完整、正确的程序,用公用继承方式。

在程序中应包括输入数据的函数,在程序运行时输入num,name,sex,age,addr的值,程序应输出以上5个数据的值。

(2)有如下程序片段:

#include

#include

usingnamespacestd;

classStudent//声明基类

{public:

//基类公用成员

voiddisplay();

protected:

//基类保护成员

intnum;

stringname;

charsex;

};

voidStudent:

:

display()//定义基类成员函数

{cout<<“num:

”<

cout<<“name:

”<

cout<<“sex:

”<

}

classStudent1:

protectedStudent//用protected方式声明派生类Student1

{public:

voiddisplay1();//派生类公用成员函数

private:

intage;//派生类私有数据成员

stringaddr;//派生类私有数据成员

};

voidStudent1:

:

display1()//定义派生类公用成员函数

{cout<<“num:

”<

cout<<“name:

”<

cout<<“sex:

”<

cout<<“age:

”<

cout<<“address:

”<

}

intmain()

{Student1stud1;//stud1是派生类Student1类的对象

stud1.display1();//合法,display1是派生类中的公用成员函数

stud1.num=10023;//错误,外界不能访问保护成员

return0;

}

将以上程序程序修改、补充,写成一个完整、正确的程序,用保护继承方式。

在程序中应包括输入数据的函数。

(3)修改上面第

(2)题的程序,改为用公用继承方式。

上机调试程序,使之能正确运行并得到正确的结果。

(4)分别声明Teacher(教师)类和Cadre(干部)类,采用多重继承方式由这两个类派生出新类Teacher_Cadre(教师兼干部)。

要求:

①在两个基类中都包含姓名、年龄、性别、地址、电话等数据成员。

②在Teacher类中还包含数据成员title(职称),在Cadre类中还包含数据成员post(职务)。

在Teacher_Cadre(教师兼干部)中还包含数据成员wages(工资)。

③对两个基类中的姓名、年龄、性别、地址、电话等数据成员用相同的名字,在引用这些数据成员时,指定作用域。

④在派生类Teacher_Cadre的成员函数show中调用Teacher类中的display函数,输出姓名、年龄、性别、职称、地址、电话,然后再用cout语句输出职务与工资。

学时数:

2学时

实验6多态性与虚函数

1、实验目的

(1)了解多态性的概念。

(2)了解虚函数的作用及使用方法。

(3)了解静态关联和动态关联的概念和用法。

(4)了解纯虚函数和抽象类的概念和用法。

2、实验内容

事先编写好程序,上机调试和运行程序,分析结果。

(1)声明Point(点)类,由Point类派生出Circle(圆)类,再由Circle类派生出Cylinder(圆柱体)类。

将类的定义部分分别作为3个头文件,对它们的成员函数的声明部分分别作为3个源文件(.cpp文件),在主函数中用#include命令把它们包含进来,形成一个完整的程序,并上机运行。

(2)有如下程序:

#include

usingnamespacestd;

classPoint//定义基类Point类

{public:

Point(){}//Point类构造函数

~Point(){cout<<“executingPointdestructor”<

};

classCircle:

publicPoint//定义派生类Circle类

{public:

Circle(){}//Circle类构造函数

~Circle(){cout<<″executingCircledestructor″<

private:

intradius;

};

intmain()

{Point*p=newCircle;//用new开辟动态存储空间

deletep;//用delete释放动态存储空间

return0;

}

要求作如下修改,并作必要的讨论。

①把构造函数修改为带参数的函数,在建立对象时初始化。

②在main函数中另设一个指向Circle类对象的指针变量,使它指向堆内存中的Circle对象。

运行程序,分析结果。

③不作第②点的修改而将析构函数声明为virtual,运行程序,分析结果。

(3)声明抽象基类Shape,由它派生出3个派生类:

Circle(圆形)、Rectangle(矩形)、Triangle(三角形),用一个函数printArea分别输出以上三者的面积,3个图形的数据在定义对象时给定。

学时数:

2学时

实验7输入输出流

1、实验目的

(1)深入理解C++的输入输出的含义与其实现方法。

(2)掌握标准输入输出流的应用,包括格式输入输出。

(3)掌握对文件的输入输出操作。

2、实验内容

事先编写好程序,上机调试和运行程序,分析结果。

(1)输入三角形的三边a,b,c,计算三角形的面积的公式是

形成三角形的条件是:

a+b>c,b+c>a,a+c>b

编写程序,输入a,b,c,检查a,b,c是否满足以上条件,如不满足,由cerr输出有关出错信息。

(2)从键盘输入一批数值,要求保留3位小数,在输出时上下行小数点对齐。

①用控制符控制输出格式;

②用流成员函数控制输出格式。

(3)建立两个磁盘文件f1.dat和f2.dat,编程序实现以下工作:

①从键盘输入20个整数,分别存放在两个磁盘文件中(每个文件中放10个整数);

②从f1.dat读入10个数,然后存放到f2.dat文件原有数据的后面;

③从f2.dat中读入20个整数,将它们按从小到大的顺序存放到f2.dat(不保留原来的数据)。

学时数:

2学时

实验8C++工具

1、实验目的

(1)学会使用C++的异常处理机制进行程序的调试

(2)学会使用命名空间解决名字冲突。

2、实验内容

事先编写好程序,上机调试和运行程序,分析结果。

(1)求一元二次方程式

的实根,如果方程没有实根,则利用异常处理机制输出有关警告信息。

(2)学校的人事部门保存了有关学生的部分数据(学号、姓名、年龄、住址),教务部门也保存了学生的另外一些数据(学号、姓名、性别、成绩),两个部门分别编写了本部门的学生数据管理程序,其中都用了Student作为类名。

现在要求在全校的学生数据管理程序中调用这两个部门的学生数据,分别输出两种内容的学生数据。

要求用ANSIC++编程,使用命名空间。

学时数:

2学时

实验9电话簿管理程序

1、实验目的

综合运用面向对象程序设计的基础知识,设计一个小型的应用程序,提高解决问题的能力。

2、实验内容

设计一个电话簿管理程序,具有加入、删除、显示、修改和查询联系人电话号码的功能。

学时数:

4学时

实验10复数计算器

1、实验目的

掌握面向对象程序设计方法和技巧,设计一个小型的应用程序,进一步提高解决问题的能力。

2、实验内容

(1)所设计的复数计算器可以进行+、-、*、+=、-=、*=、++、--、>=、<=、==、!

=运算符,其中>=、<=是针对复数的模进行运算。

(2)设计输入重载函数,要求能接收从键盘输入a+bi形式的复数,在程序中可以识别出实部虚部并正确赋值。

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

当前位置:首页 > 自然科学 > 物理

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

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