天津理工大学C期末考试.docx
- 文档编号:29203411
- 上传时间:2023-07-21
- 格式:DOCX
- 页数:81
- 大小:272.82KB
天津理工大学C期末考试.docx
《天津理工大学C期末考试.docx》由会员分享,可在线阅读,更多相关《天津理工大学C期末考试.docx(81页珍藏版)》请在冰豆网上搜索。
天津理工大学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];//存放重修科目的角标(有时不止挂掉一科可能会很多所以声明称数组) 为什么建立数据时使用的数组? 通过对角标的控制便可以把一行数据全部对应起来 请看下面数据对应关系: 角标 科目名称(sbj[i]) 成绩(mark[i]) 学分(m_mark[i]) 0 数学 44 6 1 C语言 92 6 2 英语 72 4 便于统计也可以方便地调用出一门科目的全部内容 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<<"入学时间: "< "<
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 天津 理工大学 期末考试