聊城大学《面向对象程序设计》练习题及参考答案_第1页
聊城大学《面向对象程序设计》练习题及参考答案_第2页
聊城大学《面向对象程序设计》练习题及参考答案_第3页
聊城大学《面向对象程序设计》练习题及参考答案_第4页
聊城大学《面向对象程序设计》练习题及参考答案_第5页
已阅读5页,还剩4页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

《面向对象程序设计》练习题一、程序阅读题1.阅读下面的代码,写出运行结果。#include<iostream>usingnamespacestd;classPerson{public:virtualvoiddisplay(){cout<<"Thisisaperson."<<endl;}};classStudent:publicPerson{public:voiddisplay()override{cout<<"Thisisastudent."<<endl;}};classTeacher:publicPerson{public:voiddisplay()override{cout<<"Thisisateacher."<<endl;}};intmain(){Person*person1=newPerson();Person*person2=newStudent();Person*person3=newTeacher();person1->display();person2->display();person3->display();return0;}2.下面是一个C++类的定义,请阅读并回答相关问题:classCircle{private:doubleradius;public:Circle(doubler){radius=r;}doublegetRadius(){returnradius;}doublegetArea(){return3.14*radius*radius;}voiddisplay(){cout<<"Radius:"<<radius<<",Area:"<<getArea()<<endl;}};(1)这个类的名称是什么?(2)这个类有哪些成员变量?(3)这个类有哪些成员函数?(4)这个类的构造函数是怎么定义的?(5)这个类的成员函数getArea()的作用是什么?(6)如何通过对象调用getRadius()函数?3.下面是一个C++类的定义,请阅读并回答相关问题classStudent{private:intid;std::stringname;intage;public:Student(inti,conststd::string&n,inta){id=i;name=n;age=a;}voiddisplay(){std::cout<<"ID:"<<id<<",Name:"<<name<<",Age:"<<age<<std::endl;}voidsetId(inti){id=i;}voidsetName(conststd::string&n){name=n;}voidsetAge(inta){age=a;}};(1)这个类的名称是什么?(2)这个类有哪些成员变量?(3)这个类有哪些成员函数?(4)这个类的构造函数是怎么定义的?(5)这个类的成员函数display()的作用是什么?4.阅读程序,写出运行结果。#include<iostream>classPerson{public:Person(){std::cout<<"Constructingaperson."<<std::endl;}voidintroduce(){std::cout<<"Iamaperson."<<std::endl;}virtualvoidgreet(){std::cout<<"Hello,Iamaperson."<<std::endl;}};classStudent:publicPerson{public:Student(){std::cout<<"Constructingastudent."<<std::endl;}voidintroduce(){std::cout<<"Iamastudent."<<std::endl;}voidgreet(){std::cout<<"Hello,Iamastudent."<<std::endl;}};classTeacher:publicPerson{public:Teacher(){std::cout<<"Constructingateacher."<<std::endl;}voidintroduce(){std::cout<<"Iamateacher."<<std::endl;}voidgreet(){std::cout<<"Hello,Iamateacher."<<std::endl;}};intmain(){Person*personPtr1=newStudent();Person*personPtr2=newTeacher();personPtr1->introduce();//(1)personPtr2->greet();//(2)return0;}二、程序设计题1.考虑一个基本的图形类Shape,包含一个纯虚函数getArea()用于计算图形的面积。要求设计三个派生类Rectangle、Circle和Triangle分别继承自Shape,分别表示矩形、圆形和三角形,实现对应的面积计算方法。具体要求如下:类Shape包括以下公有成员函数:virtualdoublegetArea()=0:纯虚函数,用于计算图形的面积。类Rectangle继承自Shape,包括以下私有成员变量和公有成员函数:doublewidth:宽度doubleheight:高度voidsetWidth(doublewidth):设置宽度voidsetHeight(doubleheight):设置高度doublegetArea():重写父类的纯虚函数,计算矩形的面积,公式为width*height类Circle继承自Shape,包括以下私有成员变量和公有成员函数:doubleradius:半径voidsetRadius(doubleradius):设置半径doublegetArea():重写父类的纯虚函数,计算圆形的面积,公式为3.1415926*radius*radius类Triangle继承自Shape,包括以下私有成员变量和公有成员函数:doublebase:底边长度doubleheight:高度voidsetBase(doublebase):设置底边长度voidsetHeight(doubleheight):设置高度doublegetArea():重写父类的纯虚函数,计算三角形的面积,公式为0.5*base*height注意:所有成员函数都应该在类的内部进行实现。每个派生类应该有对应的成员变量和计算面积的函数。getArea()函数应该在每个派生类中进行实现。请根据以上要求,设计并实现类Shape和派生类Rectangle、Circle和Triangle,并在main()函数中创建对象,设置各自的参数,然后调用getArea()函数输出各个图形的面积。2.设计一个简单的图形类层次结构,包含一个基类和至少两个派生类,要求:(1)基类应包含至少一个虚函数。(2)派生类应重写基类的虚函数,并实现多态的效果。(3)派生类应包含至少一个额外的成员变量和成员函数。(4)编写一个测试程序,创建基类和派生类的对象,并通过基类指针调用虚函数,实现多态的效果。3.设计一个类Student表示学生信息,包括学生的姓名、年龄、学号和成绩。要求使用封装的方式,将学生的信息隐藏在类的私有成员中,并提供公有成员函数来访问和修改学生信息。具体要求如下:类Student包括以下私有成员变量:std::stringname:学生姓名intage:学生年龄std::stringstudentID:学号doublescore:成绩类Student包括以下公有成员函数:voidsetName(conststd::string&name):设置学生姓名voidsetAge(intage):设置学生年龄voidsetStudentID(conststd::string&studentID):设置学号voidsetScore(doublescore):设置成绩std::stringgetName()const:获取学生姓名intgetAge()const:获取学生年龄std::stringgetStudentID()const:获取学号doublegetScore()const:获取成绩注意:所有成员函数都应该在类的内部进行实现。getName()、getAge()、getStudentID()、getScore()函数都应该声明为常量成员函数,不修改类的成员变量。请根据以上要求,设计并实现类Student,并在main()函数中创建对象、设置和获取学生信息,然后输出学生信息。4.设计一个简单的学生信息管理系统,包含以下两个类:Student和StudentManager。Student类具有以下成员变量:stringname:学生姓名intage:学生年龄intid:学生学号Student类具有以下成员函数:voidsetName(conststring&name):设置学生姓名voidsetAge(intage):设置学生年龄voidsetId(intid):设置学生学号voiddisplayInfo():显示学生信息StudentManager类具有以下成员变量:vector<Student>students:存储学生对象的容器StudentManager类具有以下成员函数:voidaddStudent(constStudent&student):添加一个学生到学生信息容器voidremoveStudent(intid):从学生信息容器中删除指定学号的学生voiddisplayAllStudents():显示所有学生的信息要求:使用C++编写上述两个类的定义和实现。Student类中的成员函数实现封装,通过成员函数来访问和修改成员变量。StudentManager类中的students成员变量应使用容器来存储学生对象,例如std::vector。StudentManager类中的成员函数实现对学生信息的添加、删除和显示。参考答案一、程序阅读题1.答:Thisisaperson.Thisisastudent.Thisisateacher.2.答:(1)这个类的名称是Circle。(2)这个类有一个成员变量:radius。(3)这个类有四个成员函数:getRadius()、getArea()、display()和构造函数Circle()。(4)这个类的构造函数是通过一个double类型参数r定义的,用于初始化radius成员变量。(5)这个类的成员函数getArea()的作用是计算并返回圆的面积。(6)可以通过对象名点号操作符(.)调用,例如:circle1.getRadius();3.答:(1)这个类的名称是Student(2)这个类有2个int类型的成员变量id和age,1个string类型的成员变量name(3)这个类有4个成员函数,分别是voiddisplay();voidsetId(inti);voidsetName(conststd::string&n);voidsetAge(inta);(4)这个类的构造函数是Student(inti,conststd::string&n,inta);(5)这个类的成员函数display()的作用是输出Student对象的信息。4.答:Constructingaperson.Constructingastudent.Constructingaperson.Constructingateacher.Iamaperson.Hello,Iamateacher.程序设计题1.答:#include<iostream>classShape{public:virtualdoublegetArea()=0;//纯虚函数,用于计算图形的面积};classRectangle:publicShape{private:doublewidth;doubleheight;public:voidsetWidth(doublewidth){this->width=width;}voidsetHeight(doubleheight){this->height=height;}doublegetArea(){returnwidth*height;}};classCircle:publicShape{private:doubleradius;public:voidsetRadius(doubleradius){this->radius=radius;}doublegetArea(){return3.1415926*radius*radius;}};classTriangle:publicShape{private:doublebase;doubleheight;public:voidsetBase(doublebase){this->base=base;}voidsetHeight(doubleheight){this->height=height;}doublegetArea(){return0.5*base*height;}};intmain(){Rectanglerect;rect.setWidth(5.0);rect.setHeight(10.0);std::cout<<"RectangleArea:"<<rect.getArea()<<std::endl;Circlecircle;circle.setRadius(7.0);std::cout<<"CircleArea:"<<circle.getArea()<<std::endl;Triangletri;tri.setBase(8.0);tri.setHeight(12.0);std::cout<<"TriangleArea:"<<tri.getArea()<<std::endl;return0;}2.答:#include<iostream>usingnamespacestd;//Shape类,图形基类classShape{public://虚函数,计算面积virtualdoublegetArea(){//这里返回0,表示未实现return0;}};//Rectangle类,矩形派生类classRectangle:publicShape{private:doublewidth;//矩形的宽doubleheight;//矩形的高public://构造函数Rectangle(doublew,doubleh){width=w;height=h;}//重写父类的虚函数,计算矩形的面积doublegetArea(){returnwidth*height;}//成员函数,输出矩形的宽和高voidprintInfo(){cout<<"Rectangle:width="<<width<<",height="<<height<<endl;}};//Triangle类,三角形派生类classTriangle:publicShape{private:doublebase;//三角形的底边doubleheight;//三角形的高public://构造函数Triangle(doubleb,doubleh){base=b;height=h;}//重写父类的虚函数,计算三角形的面积doublegetArea(){return0.5*base*height;}//成员函数,输出三角形的底边和高voidprintInfo(){cout<<"Triangle:base="<<base<<",height="<<height<<endl;}};intmain(){//测试程序Shape*s1=newRectangle(4,5);//创建一个矩形对象Shape*s2=newTriangle(3,6);//创建一个三角形对象s1->printInfo();//输出矩形的宽和高cout<<"RectangleArea:"<<s1->getArea()<<endl;//输出矩形的面积s2->printInfo();//输出三角形的底边和高cout<<"TriangleArea:"<<s2->getArea()<<endl;//输出三角形的面积//释放内存deletes1;deletes2;return0;}3.答:#include<iostream>#include<string>classStudent{private:std::stringname;intage;std::stringstudentID;doublescore;public:voidsetName(conststd::string&name){this->name=name;}voidsetAge(intage){this->age=age;}voidsetStudentID(conststd::string&studentID){this->studentID=studentID;}voidsetScore(doublescore){this->score=score;}std::stringgetName()const{returnname;}intgetAge()const{returnage;}std::stringgetStudentID()const{returnstudentID;}doublegetScore()const{returnscore;}};intmain(){Studentstudent;student.setName("Alice");student.setAge(20);student.setStudentID("123456789");student.setScore(95.5);std::cout<<"Name:"<<student.getName()<<std::endl;std::cout<<"Age:"<<student.getAge()<<std::endl;std::cout<<"StudentID:"<<student.getStudentID()<<std::endl;std::cout<<"Score:"<<student.getScore()<<std::endl;return0;}4.答:#include<iostream>#include<string>#include<vector>usingnamespacestd;classStudent{private:stringname;intage;intid;public:voidsetName(conststring&name){this->name=name;}voidsetAge(intage){this->age=age;}voidsetId(intid){this->id=id;}voiddisplayInfo(){

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论