C++面向对象程序设计上机实践指导.docx

上传人:b****7 文档编号:25614075 上传时间:2023-06-10 格式:DOCX 页数:81 大小:573.08KB
下载 相关 举报
C++面向对象程序设计上机实践指导.docx_第1页
第1页 / 共81页
C++面向对象程序设计上机实践指导.docx_第2页
第2页 / 共81页
C++面向对象程序设计上机实践指导.docx_第3页
第3页 / 共81页
C++面向对象程序设计上机实践指导.docx_第4页
第4页 / 共81页
C++面向对象程序设计上机实践指导.docx_第5页
第5页 / 共81页
点击查看更多>>
下载资源
资源描述

C++面向对象程序设计上机实践指导.docx

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

C++面向对象程序设计上机实践指导.docx

C++面向对象程序设计上机实践指导

东华理工大学软件学院

面向对象程序设计

上机实践指导

2016-4-10

《C++语言基础》实践项目

(一)

——初识对象

【项目1-旱冰场造价】

  有一个圆形的旱冰场地,场地内抹水泥,造价为每平方米M元,围栏用木条围成,每米造价N元,输入旱冰场半径,用程序计算出其造价。

一级提示:

  先定义类,确定其数据成员和成员函数。

在这里要定义的旱冰场类,实际我们只关心其面积和周长,根据面积计算场地内抹水泥的造价,根据周长计算围栏的造价。

有了类的定义,在main函数中定义该类对象,调用成员函数即可以完成求解。

二级提示:

  实际上,对于旱冰场,我们只关心它就是一个圆。

这就是设计中抓住了本质。

于是,设计一个Circle(圆)类,数据成员为圆的半径,Circle类还提供计算圆的面积和边长的成员函数。

在main函数中,定义一个Circle类的对象,调用成员函数求出旱冰场的造价。

三级提示:

  请在下面提示的基础上完成程序,其中需要做的工作包括:

(1)在类声明中声明相关的公共成员函数;

(2)在类声明和main()函数之间,定义声明的成员函数。

const int M=20;   //水泥场地每平米造价  

const int N=35;   //围栏每米造价  

class Circle  

{  

//下面声明需要的成员函数(从已经提供的main函数中可以找出需要哪些成员函数)  

public:

private:

  

    double radius;  

};  

//下面定义需要的成员函数  

  

  

int main()  

{  

    double r;  

    cout<<"请输入旱冰场的半径:

 ";  

    cin>>r;  

    Circle c;  

    c.setRadius(r);  

    cout<<"旱冰场的造价为 "<

"<

    return 0;  

}  

constintM=20;//水泥场地每平米造价

constintN=35;//围栏每米造价

classCircle

{

//下面声明需要的成员函数(从已经提供的main函数中可以找出需要哪些成员函数)

 

private:

doubleradius;

};

//下面定义需要的成员函数

 

intmain()

{

doubler;

cout<<"请输入旱冰场的半径:

";

cin>>r;

Circlec;

c.setRadius(r);

cout<<"旱冰场的造价为"<

"<

return0;

}

【项目2-长方柱类】

  编写基于对象的程序,求3个长方柱(Bulk)的体积。

数据成员包括长(length)、宽(width)、高(heigth)、体积,要求设计成员函数实现下面的功能:

  

(1)由键盘输入3个长方柱的长、宽、高;

  

(2)计算长方柱的体积(volume)和表面积(areas);

  (3)输出这3个长方柱的体积和表面积;

【项目3-时间类】阅读、运行程序后,按要求扩充类的功能

#include

usingnamespacestd;

classTime

{

public:

voidset_time();

voidshow_time();

private:

boolis_time(int,int,int);//这个成员函数设置为私有的,是合适的,请品味

inthour;

intminute;

intsec;

};

voidTime:

:

set_time()

{

charc1,c2;

cout<<"请输入时间(格式hh:

mm:

ss)";

while

(1)

{cin>>hour>>c1>>minute>>c2>>sec;

if(c1!

=':

'||c2!

=':

')

cout<<"格式不正确,请重新输入"<

elseif(!

is_time(hour,minute,sec))

cout<<"时间非法,请重新输入"<

else

break;

}

}

voidTime:

:

show_time()

{

cout<

"<

"<

}

boolTime:

:

is_time(inth,intm,ints)

{

if(h<0||h>24||m<0||m>60||s<0||s>60)

returnfalse;

returntrue;

}

intmain()

{

Timet1;

t1.set_time();

T1.show_time();

return0;

}

要求:

(1)请在原类基础上,在类内增加下列成员函数(将是内置成员函数)

add_a_sec() //增加1秒钟

add_a_minute()//增加1分钟

add_an_hour()//增加1小时

在main()数中,调用新增加的成员函数,以测试扩充后的功能。

(2)再增加三个成员函数,要求在类内声明,类外定义。

add_seconds(int)//增加n秒钟

add_minutes(int)//增加n分钟

add_hours(int)//增加n小时

提示:

要考虑增加后超出取值范围的情形;

增加n秒后,秒数可能会超过60,调整秒数,并可以调用增加分钟数的成员函数,使时间合法;同理,增加分钟数也有类似问题。

【项目4-图书馆的书】

  编写一个Book类,包含name(书名)、writer(著者)、public_name(出版社)、price(价格)、number(数量)、NO(书号)等数据成员。

定义成员函数setBook,用来为书籍的数据成员赋值,定义成员函数borrow和restore,分别办理借出和还回(借、还书时,暂时只完成数量的增1减1,这里的书仍是一种书的概念,随着课程进展,我们继续做真正的图书管理系统,每本书都能追踪到是谁何时借了,何时还了)业务,定义成员函数print用于输出—有关书的信息,定义set_NO与get_NO来实现修改类对象的书号与获得类对象的书号。

自己写main函数,用来测试你编写的类。

《C++语言基础》实践项目

(二)

——和对象找感觉

【项目1-三角形类1】下面设计一个三角形类,请给出各成员函数的定义 

//请在下面定义Triangle类中的各个成员函数  

#include

#include

usingnamespacestd;

classTriangle

{

public:

voidsetABC(doublex,doubley,doublez);//置三边的值,注意要能成三角形

voidgetABC(double*x,double*y,double*z);//取三边的值

doubleperimeter(void);//计算三角形的周长

doublearea(void);//计算并返回三角形的面积

private:

doublea,b,c;//三边为私有成员数据

};

intmain()

{

Triangletri1;//定义三角形类的一个实例(对象)

tri1.setABC(4,5,6);//为三边置初值

doublex,y,z;

tri1.getABC(&x,&y,&z);//将三边的值为x,y,z赋值

cout<<"三条边为:

"<

cout<<"三角形的周长为:

"<

"<

return0;

}

//请在下面定义Triangle类中的各个成员函数

【项目2-三角形类2】程序功能同项目1,main()函数如下,请重新定义Triangle类,其中逻辑特别简单的set和get成员函数,要处理为内置成员函数,直接在类内定义。

intmain()

{

Triangletri1;//定义三角形类的一个实例(对象)

doublex,y,z;

cout<<"请输入三角形的三边:

";

cin>>x>>y>>z;

tri1.setA(x);

tri1.setB(y);

tri1.setC(z);//为三边置初值

if(tri1.isTriangle())

{

cout<<"三条边为:

"<

cout<<"三角形的周长为:

"<

"<

}

else

cout<<"不能构成三角形"<

return0;

}

【项目3-程序的多文件组织】

利用多文件组织,重新实现项目2。

其中,整个项目包括3个文件:

主文件:

main.cpp,用于定义main()函数

头文件:

triangle.h,头文件,声明类,定义内置成员函数

类定义文件:

triangle.cpp,用于定义类Triangle中其他成员函数

注意,将3个set函数和3个get函数设计成内置成员函数,其他函数不作为内置函数。

【项目4-考了语文数学的学生】

下面提供了类Stu的数据成员定义,和用于测试的main函数,参考如图的运行结果,完成类的定义,并用多文件形式组织程序

#include  

using namespace std;  

class Stu  

{  

private:

  

    string name;    //学生姓名  

    float chinese;  //语文成绩  

    float math;     //数学成绩  

    //接下去写  

};  

  

int main()  

{  

    Stu s1,s2;  

    s1.setStudent("Lin daiyu", 98, 96); //对象置初值  

    s2.setStudent("Jia baoyu", 90, 88); //对象置初值  

    s1.show();//打印信息  

    s2.show();//打印信息  

    s1.setName("xue baochai");//重新置p1对象的名字  

    s1.show();  

    cout<<"s1.Name:

 "<

    cout<<"s1.average:

 "<

    return 0;  

}  

#include

usingnamespacestd;

classStu

{

private:

stringname;//学生姓名

floatchinese;//语文成绩

floatmath;//数学成绩

//接下去写

};

 

intmain()

{

Stus1,s2;

s1.setStudent("Lindaiyu",98,96);//对象置初值

s2.setStudent("Jiabaoyu",90,88);//对象置初值

s1.show();//打印信息

s2.show();//打印信息

s1.setName("xuebaochai");//重新置p1对象的名字

s1.show();

cout<<"s1.Name:

"<

cout<<"s1.average:

"<

return0;

}

【项目5-数组作数据成员】设计一个工资类(Salary),其中类的数据成员如下:

classSalary

{

private:

doublesalarys[50];//多人的工资

intnumber;//实际人数

};

要设计的成员函数有:

voidset_salarys():

输入职工工资(输入-1标志着工资输入结束),工资保存到salary数组中,实际人数保存到number中;

voidadd_salarys(intx):

给每个人涨x元工资

voidsort_salarys():

对工资排序

voidshow_salarys():

显示工资信息

(1)在main函数定义Salary类的对象,输入工资,再给每个人涨500元工资,排序后工资数据,然后输出结果。

(2)用salary[50]有限制,实际人数少时,会浪费空间,人数多了,无法完成任务。

在main()中先输入职工人数,作为参数传递给输入职工工资的成员函数,然后利用动态分配内存的机制,开辟一个大小正好的连续空间,完成上面的工作。

(3)手工输入工资?

太让人不能忍受了。

现给出包含了不足500个职工工资的文件salary.txt,从文件中读数据,完成上面的工作。

(4)增加一个成员函数,将排序后结果保存到一个文件中。

(5)用多文件的方式组织最后的程序。

《C++语言基础》实践项目(三)

——构造函数和析构函数

【项目1-三角形类的构造函数】

  设计三角形类,通过增加构造函数,使对象在定义时能够进行初始化,可以由下面的类声明开始,需要自己实现相关的成员函数,以及增加要求的构造函数

class Triangle  

{  

public:

  

    double perimeter();//计算三角形的周长  

    double area();//计算并返回三角形的面积  

    void showMessage();  

private:

  

    double a,b,c; //三边为私有成员数据  

};  

void Triangle:

:

showMessage()  

{  

    cout<<"三角形的三边长分别为:

"<

    cout<<"该三角形的周长为"<

"<

}  

classTriangle

{

public:

doubleperimeter();//计算三角形的周长

doublearea();//计算并返回三角形的面积

voidshowMessage();

private:

doublea,b,c;//三边为私有成员数据

};

voidTriangle:

:

showMessage()

{

cout<<"三角形的三边长分别为:

"<

cout<<"该三角形的周长为"<

"<

}

本项目将包括多个版本,开始写程序前,保证搞清楚何为带参数的构造函数、默认构造函数、有默认参数的构造函数、参数初始化表。

(1)使用带参数构造函数,即Triangle(doublex,doubley,doublez),三边长在调用时由实参直接给出。

需要的测试函数是:

int main(){  

    Triangle Tri(7,8,9);    //定义三角形类的一个实例(对象)  

    Tri.showMessage();  

    return 0;  

}  

intmain(){

TriangleTri(7,8,9);//定义三角形类的一个实例(对象)

Tri.showMessage();

return0;

}

(2)设计默认构造函数,即不指定参数时,默认各边长为1。

需要的测试函数是:

int main()  

{  

    Triangle Tri;   //调用默认构造函数,不指定参数时,默认各边长为1;  

    Tri.showMessage();  

    return 0;  

}  

intmain()

{

TriangleTri;//调用默认构造函数,不指定参数时,默认各边长为1;

Tri.showMessage();

return0;

}

(3)使用有默认参数的构造函数,不给定实参时,默认边长为1;注意——这个版本也只需要一个构造函数即可。

需要的测试函数是:

int main(){  

    Triangle Tri1;   //定义边长为1 1 1的三角形类实例  

    Tri1.showMessage();  

    Triangle Tri2(1.5);//定义边长为1.5 1 1的三角形类实例  

    Tri2.showMessage();  

    Triangle Tri3(1.5,1.5);//定义边长为1.5 1.5 1的三角形类实例  

    Tri3.showMessage();  

    Triangle Tri4(7,8,9); //定义边长为7 8 9的三角形类实例  

    Tri4.showMessage();  

    return 0;  

}  

intmain(){

TriangleTri1;//定义边长为111的三角形类实例

Tri1.showMessage();

TriangleTri2(1.5);//定义边长为1.511的三角形类实例

Tri2.showMessage();

TriangleTri3(1.5,1.5);//定义边长为1.51.51的三角形类实例

Tri3.showMessage();

TriangleTri4(7,8,9);//定义边长为789的三角形类实例

Tri4.showMessage();

return0;

}

(4)在构造函数中使用参数初始化表对数据成员初始化,这是一种更加提倡的写法。

测试函数同

(1)。

【项目2-分数类的雏形】

  C++中提供了多种基本的数据类型。

实际上,这些远不能满足我们的需求,如复数(第10章的例子大多是处理复数),再如分数。

我们可以自定义类支持这些数据类型。

  本任务将设计一个简单的分数类,完成对分数的几个运算。

一则巩固基于对象编程的方法,二则也为运算符重载等积累些感性认识。

  分数类的声明为:

classCFraction

{

private:

intnume;//分子

intdeno;//分母

public:

CFraction(intnu=0,intde=1);//构造函数,初始化用

voidset(intnu=0,intde=1);//置值,改变值时用

voidinput();//按照"nu/de"的格式,如"5/2"的形式输入

voidsimplify();//化简(使分子分母没有公因子)

voidamplify(intn);//放大n倍,如2/3放大5倍为10/3

voidoutput(intstyle=0);//输出:

以8/6为例,style为0时,原样输出8/6;

//style为1时,输出化简后形式4/3;

//style为2时,输出1(1/3)形式,表示一又三分之一;

//style为3时,用小数形式输出,如1.3333;

//默认方式0

};

项目要求:

完成分数类的设计,并在main()函数中自行定义对象,调用各成员函数,完成基本的测试。

实践策略:

(1)不建议一次实现所有成员函数后再调试,而是实现一个,测试一个;

(2)本项目的实现及测试顺序可以是:

先构造函数和输出output函数(可以先只实现一种输出方式),再set函数,再input函数,等等。

以后我们将能够:

(1)定义了inti,j,能用cin>>i>>j;在键盘上输入i和j的值。

以后,定义了CFractionc1,c2,可以用cin>>c1>>c2;输入分数,用cout<

(2)i+j完成两个整型数的相加,我们可以通过自行定义成员函数,用c1+c2、c1/c2、c1>c2等,实现分数的四则运算、比较、求倒数等。

【项目3-用对象数组操作长方柱类】

编写基于对象的程序,求5个长方柱的体积和表面积。

长方柱类Bulk的数据成员包括长(length)、宽(width)、高(heigth)等。

对照已经给出的代码,要做的工作及要求有:

需要你定义长方柱类,代码中已经给出由5个长方柱对象构成的对象数组b;

B数组中的前3个对象b[0]、b[1]、b[2]直接参数初始了,需要定义构造函数,而初始化中,各对象提供的参数数目不同,需要有默认参数的构造函数(未给出的参数默认为1.0)

第4个对象b[3]用默认构造函数初始化;

第5个长方柱b[4]定义时不初始化,设计成员函数get_value,由键盘输入长、宽、高;

设计成员函数output,在main中调用输出这5个长方柱的体积和表面积;

intmain()

{

Bulkb[5]={Bulk(2.3,4.5,6.7),Bulk(1.5,3.4),Bulk(10.5)};

b[4].get_value();

//下面分别输出这5个长方柱的体积和表面积

}

【项目4-指向学生类的指针】

设计一个学生类Student,数据成员包括学号(num)和成绩(score),成员函数根据需要自行设计(建议配备需要的set、get函数,以及必要的输入或输出,给出的代码中也可以找到需要成员函数的线索)。

在main函数中,要做到:

建立一个对象数组,通过初始化,设置5个学生的数据,要求:

用指针指向数组首元素,输出第1、3、5个学生的信息;

设计一个函数intmax(Student*arr);,用指向对象的指针作函数参数,在max函数中找出5个学生中成绩最高者,并返回值其学号。

下面给出部分程序,在此基础上完成项目:

class Student  

{  

public:

  

    ……  

private:

  

    int num;   //学号  

    double score;   //成绩  

};  

  

//max函数返回arr指向的对象数组中的最高成绩(max并不

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

当前位置:首页 > 法律文书 > 调解书

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

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