天津理工大学C++期末考试.docx

上传人:b****4 文档编号:5498356 上传时间:2022-12-17 格式:DOCX 页数:67 大小:272.81KB
下载 相关 举报
天津理工大学C++期末考试.docx_第1页
第1页 / 共67页
天津理工大学C++期末考试.docx_第2页
第2页 / 共67页
天津理工大学C++期末考试.docx_第3页
第3页 / 共67页
天津理工大学C++期末考试.docx_第4页
第4页 / 共67页
天津理工大学C++期末考试.docx_第5页
第5页 / 共67页
点击查看更多>>
下载资源
资源描述

天津理工大学C++期末考试.docx

《天津理工大学C++期末考试.docx》由会员分享,可在线阅读,更多相关《天津理工大学C++期末考试.docx(67页珍藏版)》请在冰豆网上搜索。

天津理工大学C++期末考试.docx

天津理工大学C++期末考试

实验一

一、明确的概念:

(1)理解类和对象的概念;(具体见附一)

类是抽象的对象是具体的例如:

你、我、他都是人那么你、我、他就是对象人就是类

(2)掌握类与对象的定义方法;

类的定义:

class类名{…/*定义这个类*/};//(别忘了最后的分号)

对象的定义:

类名对象名(参数);

(3)理解类的成员的访问控制的含义,公有和私有成员的区别;

public:

//访问属性为公有通过外部直接访问即:

对象名.成员名或成员函数

private:

//访问属性为私有不能通过外部直接访问(不声明访问属性时系统默认为私有)当出现对象名.成员(私有)时编译器报错

protected:

//访问属性为保护与private类似但protected属性的成员可以继承private不能继承

(4)掌握构造函数和析构函数的含义与作用、定义方式和实现;

构造函数:

为数据成员开辟存储空间

函数名必须与类名相同之前绝对不许说明返回值类型void也不行

构造函数不能由用户调用即:

对象名.构造函数名(参数)是错误的

构造函数是随着对象的声明而调用的

例如:

classStudent{Student(){cout<<”Hello.”<

Intmain(void)

{cout<<”Hello.”<

StudentA;

}

运行结果:

Hello.//<-这个Hello是主函数中的

Hello.//<-是声明A对象时调用的构造函数构造函数中的Hello

析构函数功能与构造函数相反注意调用时间和顺序(看书)

二、

练习项目

1.

输入下列程序,按要求进行实验,并记录实验的结果。

#include

usingnamespacestd;

classCoordinate

{

public:

Coordinate(intx1,inty1){x=x1;y=y1;}

Coordinate(Coordinate&p);

~Coordinate(){cout<<"Destructoriscalled."<

intgetx(){returnx;}

intgety(){returny;}

private:

intx,y;

};

Coordinate:

:

Coordinate(Coordinate&p){//拷贝构造函数

x=p.x;y=p.y;

cout<<"Copyinitianizationconstructoriscalled."<

}

intmain(){

Coordinatep1(3,4);

Coordinatep2(p1);

Coordinatep3=p2;

cout<<"p3=("<

return0;

}

(1)记录程序的运行结果

(2)将Coordinate类中带有两个参数的构造函数进行修改,在函数体内增加如下语句:

cout<<”Constructoriscalled.”<

重新记录程序的运行结果,并解释输出结果。

(3)按下列要求进行测试。

在主函数体内,添加如下语句:

Coordinatep4;←错误原因:

构造函数没有参数构造函数为Coordinate:

:

Coordinate(int,int)

Coordinatep5

(2);←错误原因:

参数数量不对

2.

根据注释语句的提示实现类Date的成员函数,并将完整的程序编译、连接成功以保证程序能够正确运行。

#include

classDate{

public:

voidprintDate();//显示日期

分析:

1.题目中Date类的数据成员为day,month,year且均为整型访问属性为私有主函数中声明了testDay对象

2.数据成员均为私有则不能通过tesDay.day=<数值>的方法来设置题目中给出了voidsetDay(int)voidsetMonth(int)和voidsetYear(int)三个成员函数去是指daymonth和year的值还有一个voidprintDate()来输出

3.准备工作结束开始编程看程序仅差4个成员函数未定义类外定义要写出作用域即该函数属于哪个类:

格式:

返回值类型作用域:

:

函数名参数表

voidDate:

:

setDay(intd)/*定义时必须要给形参一个名字这里给的是*/d{day=d}//设置了day的值其他函数依此类推输出函数就不用再唠叨了

4.验证结果出现溢出数据时查看是否写反了例如写成d=day了解设置函数的作用机制见附二

voidsetDay(int);//设置日的值

voidsetMonth(int);//设置月的值

voidsetYear(int);//设置年的值

private:

intday,month,year;

};

intmain(){

DatetestDay;

testDay.setDay(5);

testDay.setMonth(10);

testDay.setYear(2010);

testDay.printDate();

};

voidDate:

:

setDay(intd){day=d;}

voidDate:

:

setMonth(intm){month=m;}

voidDate:

:

setYear(inty){year=y;}

voidDate:

:

printDate(){cout<

3.

下面是一个计算器类的定义,请完成该类的成员函数的实现,并设计一个主函数使用该类和相关成员函数以测试

该类设计的正确性。

#include

usingnamespacestd;

classcounter

{

public:

counter(intnumber=0)//构造函数

{

value=number;

}

voidincrement();//给value原值加1

voiddecrement();//给value原值减1

intgetvalue();//取得计数器值

intprint();//显示计数

private:

intvalue;//数据成员

};

voidcounter:

:

increment(){value++;cout<<"Thecounterhasincreasedby1"<

voidcounter:

:

decrement(){value--;cout<<"Thecounterhasdecreasedby1"<

intcounter:

:

getvalue(){returnvalue;}

intcounter:

:

print(){cout<<"\nDisplay:

"<

intmain(){

cout<<"Pleaseinputoriginnumber:

";//定义counter类的几个对象并调用有关成员函数

inta;

cin>>a;

counterc(a);//输入a并将a作为参数通过构造函数为对象中的value赋值

c.increment();

c.print();//题目要求验证所以使用输出函数一次验证value的值

c.decrement();

c.print();

return0;

}

4.

定义一个类ClsName,要求该类设计如下:

(1)该类有两个整型数据成员x和y;

(2)为该类重载三个不同的构造函数:

分别为无参数、带一个参数和带两个参数的构造函数,要求在构造函数中输出必要的信息以示区别;

(3)设计2个成员函数用来读取数据成员x和y;

(4)设计2个成员函数用来设置数据成员x和y;

(5)设计1个成员函数用来在屏幕上打印输出数据成员x和y;

(6)在main()函数中用三个不同的构造函数创建3个对象,并使用所有的成员函数对这些对象进行必要的操作。

classClsName

{

public:

inta,b;

ClsName(inta,intb){cout<<"Constructbytwonumbers."<

(2)中要求的重载构造函数

ClsName(inta){cout<<"Constructby1number."<

ClsName(void){cout<<"Constructwithoutanumber."<

intgetx(){returnx;}←因为x,y的访问属性为私有,不能由主函数直接访问所以会设置读取函数专门负责返回相应的值

重载:

函数名相同,参数的类型不同或者个数不同、或者都不同。

即根据带入参数的类型、数量的不同,来实现不同的功能

intgety(){returny;}

voidsetx(){cout<<"ChangeX:

";cin>>x;}

voidsety(){cout<<"ChangeY:

";cin>>y;}

voidprint(){cout<<"X="<

private:

intx,y;←

(1)中要求的两个整型数据成员

};

intmain()

{

inta,b;

cout<<"Test1:

Inputwith2numbers,nowpleaseinputtwonumbers:

"<

cin>>a;cin>>b;

ClsNamet1(a,b);

t1.print();

t1.setx();t1.sety();

t1.print();

cout<<"\nTest2:

Inputwithanumbers,nowpleaseinputanumber:

";

cin>>a;

ClsNamet2(a);

t2.print();

t2.setx();t2.sety();

t2.print();

cout<<"\nTest3:

Withoutnumbers";

ClsNamet3;

t3.print();

t3.setx();t3.sety();

t3.print();

return0;

5.

建立类cylinder,包括两个数据成员radius和height,分别表示圆柱体的半径和高度,cylinder类的构造函数被传递了两个double值来初始化这两个成员;定义成员函数area()和volume用来求圆柱体的表面积和体积,定义成员函数print()打印cylinder类的相关信息。

最后,在主函数中对cylinder类的设计进行测试。

这题很简单没啥说的

#include

classcylinder

{

public:

voidset(doubler,doubleh){radius=r,height=h;}

doublearea(){return(radius*3.14);}

doublevolume(){return(height*area());}

voidprint(){cout<<"Area="<

private:

doubleradius,height;

};

intmain()

{

inta,b;

cylinderv;

cout<<"Radius=";

cin>>a;

cout<<"Height=";

cin>>b;

v.set(a,b);

v.print();

return0;

}

6.

定义一个学生类CStudent实现简单的学籍管理功能,要求该类至少实现以下功能:

(1)录入学生的基本信息(包括姓名,学号,性别,年龄,专业,入学时间,各门功课成绩)

(2)输出学生的基本信息

(3)选课(输入时间和所选的课程)

(4)统计每门课的学分绩点

(5)统计每学期的平均学分绩点

(6)统计重考科目

(7)统计重修科目

#include

#include

usingnamespacestd;

constMAX=4;

classCStudent{

stringname,sex,ID,object,jtime;//分别存储姓名性别学号专业入学时间

intage;//存储年龄

intmark[MAX];//设立一个数组存放成绩

stringsbj[MAX];//设立string数组来存放科目名称

intretry,redo;//统计重考重修数量

stringt_chose,s_chose;//存放选课时间和选课名称

intm_point[MAX],m_mark[MAX];//存放每门功课的学分和绩点

intmarker[MAX];//存放重修科目的角标(有时不止挂掉一科可能会很多所以声明称数组)

intmarker2[MAX];//存放重修科目角标

public:

CStudent()

{

cout<<"构造CStudent开始录入基本信息"<

cout<<"Name:

";cin>>name;

cout<<"ID:

";cin>>ID;

cout<<"Sex:

";cin>>sex;

cout<<"Age:

";cin>>age;

cout<<"YourObject:

";cin>>object;

cout<<"Timeyoujointhecolleage:

";cin>>jtime;

cout<<"Nowpleaseinputyourmarks."<

for(inti=0;i

{

cout<<"Subjectname:

";cin>>sbj[i];

cout<<"Mark:

";cin>>mark[i];

}

}

voidbaseprint()//按

(2)要求输出基本信息

{

cout<<"基本信息:

"<

cout<<"学生姓名:

"<

"<

"<

cout<<"入学时间:

"<

"<

cout<<"成绩:

"<

for(inti=0;i

{

cout<

"<

}

cout<

}

voidchose()//按(3)要求设置选课函数

{

cout<<"选课名称:

";cin>>s_chose;

cout<<"选课时间:

";cin>>t_chose;

}

voidPoint()//按(4)要求

{

for(inti=0;i

{

cout<<"请设置"<

";cin>>m_mark[i];

}

cout<

cout<

intscore=0,j=0;//给score赋初值防止溢出因为后面有score+=...相当于score=score+...无法确定第一个score的值

retry=0;

for(i=0;i

{

if(mark[i]>=60)score+=m_mark[i];//成绩及格垒加学分

else{retry++;marker[j++]=i;}//否则不及格便要重考将重考数量自增

}//其中marker[j++]=i是将当时重修科目的角标记录下来

floats=0;

for(i=0;i

if(m_mark==0){m_point[i]=0;cout<

float(m_point[i]=4-(100-(float)mark[i])*(100-(float)mark[i])/1600);//绩点的计算方法

s+=m_point[i];

cout<

"<

"<

}

cout<<"平均绩点为:

"<

cout<

}

voidcheck()

{

if(retry==0)cout<<"无重考科目";

else

{

cout<<"重考数目为:

"<

for(inti=0;i

cout<

redo=0;

cout<

inttemp,j=0;

cout<<"输入重考分数"<

for(i=0;i

{

cout<

";cin>>temp;

if(temp<60)

{

redo++;

marker2[j++]=marker[i];

}

}

cout<

if(redo==0)cout<<"无重修科目";

else

{

cout<<"重修数目为:

"<

for(i=0;i

cout<

}

}

}

};

intmain(void)

{

CStudenta;

a.baseprint();

a.chose();

a.Point();

a.check();

return0;

}

注意:

(1)新设计的类中所需要的数据成员需要根据所要实现的功能自行设计;

(2)用一个演示程序完成对所设计的新类的功能测试,并给出测试数据和实验结果;

(3)为增加程序可读性,请在程序中对类成员进行适当注释说明;

补充实验题:

(1)教材134页【3.33】-【3.36】

 

实验二

(2010-3-23)

实验名称:

复杂形式的对象。

实验目的:

(1)掌握对象数组、对象指针和string类的使用方法;

把对象想象成一种数据类型比如整型有整型数组吧(inta[10])自然也有对象数组

对象指针以以上类似有时涉及到动态联编()

String类不如说是string类型类似于智能化的字符串数组

(2)掌握对象数组、对象指针和对象引用作为函数参数的使用方法;

主要看书实际用的不多注意对象数组初始化方法(书P77中上的说明)

(3)掌握类对象作为成员的使用方法;

了解就行

(4)掌握友元的概念和使用方法;

通常的,通过A对象想要访问B对象的私有成员是不可能的而通过友元就可以做到

需要注意的是友元函数虽然在类内声明但是友元函数不是成员函数独立于类外所以类外定义是不能加作用域“:

另外,由于使用的VisualC++6.0不是完全使用C++标准编程时如果遇到报错内容为一堆大写字母且错误位置指向友元函数的话把#includeusingnamespacestd;改为#include还有!

只有上述情况才可以把头文件加上“.h”,否则会导致部分功能不正常

(5)掌握静态数据成员和静态成员函数的使用方法;

例如:

有Object类,拥有数据成员a,由Object类声明出的对象A、B、C,那么A、B、C都拥有各自的a,内存中也会分配出各自的内存空间A:

:

a,B:

:

a,C:

:

a(共3个)。

而如果将数据成员a声明为静态成员(static),那么A、B、C则共用一个内存空间a(只有1个)

最典型的例子是统计声明对象的数量

使用方法:

static数据类型数据成员名

由于不能直接对数据成员赋初值所以静态数据成员初始化方法为:

数据类型类名:

静态数据成员名=初值(注意:

1.是类名,不是对象名;2.之前不要加static)

静态成员函数

静态成员函数属于整个类而不是某个对象所以调用方法为类名:

静态成员函数名(参数表)

其他参看书P103几点说明

练习项目

Time类的框架定义如下:

#include

//PoweredbyZuki&X.Duke

classTime//声明Time类

{

public:

Time(intA=0,intB=0,intC=0)//带默认参数的构造函数

{

hour=A;

minute=B;

second=C;

}

//setfunctions

voidsetTime(inta,intb,intc)//设置hour,minute,second

{

cout<<"RunSetimeFunction"<

setHour(a);

setMinute(b);

setSecond(c);

}

voidsetHour(inta)//设置hour(确保数据在合理范围)

{

for(;;)

{

if(a>=24||a<0)

{

cout<<"小时输入错误再来一次"<

cin>>a;

}

else{break;}

}

hour=a;

}

voidsetMinute(

展开阅读全文
相关搜索

当前位置:首页 > 医药卫生

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

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