面向对象程序设计 练习题1

上传人:ca****in 文档编号:196949313 上传时间:2023-04-02 格式:DOC 页数:8 大小:112.50KB
收藏 版权申诉 举报 下载
面向对象程序设计 练习题1_第1页
第1页 / 共8页
面向对象程序设计 练习题1_第2页
第2页 / 共8页
面向对象程序设计 练习题1_第3页
第3页 / 共8页
资源描述:

《面向对象程序设计 练习题1》由会员分享,可在线阅读,更多相关《面向对象程序设计 练习题1(8页珍藏版)》请在装配图网上搜索。

1、面向对象程序设计(C+描述)练习题1一、判断题(1分55分),正确的打“”,错误的打“”。答1、类的静态成员函数可以访问类的实例数据成员。(F)2、this指针是隐含于每一个类的成员函数中的特殊指针,但不包括构造函数和析构函数)。(F)3、若类A是类B的友元类,则类B也是类A的友元类。(F)4、在C+中可以使用throw重抛异常。 (T)5、命名空间是用来限定名称的解析和使用范围的,以解决命名冲突。(T)二、选择题(1.5分3045分),每题有四个选项,请将最佳的选项填写到下面表格中。1、下面代码使用文件流,以“写”方式打开文件myfile.txt不正确的是(D)A、ofstream outf

2、ile; outfile.open(myfile.txt, ios:out);B、ofstream outfile(myfile.txt);C、fstream outfile(myfile.txt, ios:out);D、ifstream outfile(myfile.txt);2、考虑下列程序:#include using namespace std;int main( )bool bFlag = true; int i = 2010;while(bFlag); if(i%2 = 0) cout “偶数” endl;bFlag = false;else cout “奇数 ”; i+;关于编译

3、上述程序下列哪个正确?(D)A、程序编译成功,执行后输出“偶数”。 B、程序编译成功,执行后没有输出。C、程序编译成功,执行后输出“奇数 偶数”。D、程序编译不成功,产生一些错误。3、在语句 cout data; 中,cout是(D)A、C+的关键字 B、类名 C、函数名 D、对象名4、分析下列程序:#include using namespace std;class CTest public:CTest( ) cout ”调用构造函数!” endl;int main( ) CTest obj;下面分析正确的是(A)A、程序编译成功,执行后输出字符串“调用构造函数!”。 B、程序编译成功,执行

4、后没有输出。C、程序编译失败。 D、程序编译成功,执行后输出一组废字符。5、已知 int x = 5; 则下列表示引用的方法中,正确的是(D)A、int &r; B、int &r = 5; C、int &r = &x; D、float &r = x;6、考虑下列程序:#include using namespace std;class CBase public:CBase( ) cout ”CATS ”; ;class CDerived : protected CBase public:CDerived( ) cout ”TIGERS ”; ;int main( ) CDerived obj;

5、程序执行后输出为(A)A、CATS TIGERS B、TIGERS CATS C、CATS D、TIGERS7、考虑下列程序:#includeusing namespace std;class CA public:virtual void func( ) = 0;class CB public:void func( ) cout ”Call B”; ;class CC : public CA, public CB public:virtual void func( ) cout func( );关于编译上述程序下列哪条语句正确?(A)A、程序成功编译,执行后输出”Call C”。 B、程序编译

6、错误。C、程序成功编译,执行后没输出。 D、程序成功编译,执行后输出”Call B”。8、下列哪个函数说明表示后缀一元运算符+的重载?(A)A int operator+(int) B int operator+( )C int operator+(int &) D int operator+(void &)9、在C+中,下面四组代码中的函数说明: Group 1: class CA void print( ); void print( ) const; Group 2: char func(int, char); int func(int, char);Group 3: float add(

7、float, int); float add(int, float);Group 4: int square(int); float square(int*);哪组不是重载的函数?(B) Group 1 Group 2 Group 3 Group 410、在int b 4 = 1,4,3,2,1,4,5,6,7,0; 中b12的值是(B)A、4 B、2 C、5 D、011、考虑函数原型voidtest(inta = 0, char* p = *),下面的函数调用中,属于不合法调用的是(C)A、test(); B、test(1); C、test(, #); D、test(1, *);12、下面有

8、关函数重写的说法中正确的是(D)A、重写函数必须具有不同的返回值类型。B、重写函数的函数名可以不同。C、重写函数必须有不同的形参列表。D、重写函数和被重写函数在不同类中。13、下列关于构造函数的描述中,错误的是(D)A、构造函数可以设置默认参数。B、构造函数可以不带参数。C、构造函数可以是内联函数。 D、构造函数不可以重载。14、下面描述中,表达错误的是(A)A、保护继承时基类中的public成员在派生类中仍是public的。B、私有继承时派生类中的成员函数可以直接访问基类中的protected成员。C、私有继承时基类中的public成员在派生类中是private的。D、公有继承时基类中的pr

9、otected成员在派生类中仍是protected的。15、下面选项中不属于面向对象程序设计特征的是(C)A、继承性 B、多态性 C、类比性 D、封装性16、以下选项中,与语句 x = y+ 完全等价的表达式是(D)A、x += y + 1; B、y = y + 1, x = y; C、x = +y; D、x = y, y = y + 1;17、下列关于运算符重载的描述中,错误的是(B)A、运算符重载不可以改变结合性。B、运算符重载可以改变语法结构。C、运算符重载不可以改变操作数的个数。D、运算符重载不可以改变运算符的优先级。18、对类的构造函数和析构函数描述正确的是(D)A、构造函数不能重载

10、,析构函数也不能重载。B、构造函数可以重载,析构函数也可以重载。C、构造函数不能重载,析构函数可以重载。D、构造函数可以重载,析构函数不能重载。19、设变量i的数据类型是int,f的数据类型是float,d的数据类型是double,则表达式10 + i + d * f值的数据类型为(C)A、int B、float C、double D、不确定20、下列关于抽象类的描述中,不正确的是(D)A、在程序中不能说明抽象类的对象。B、在程序中可以声明指向抽象类对象的指针。C、含有纯虚函数的类称为抽象类。D、抽象类有且只能有一个纯虚函数。21、关于函数的调用下面不正确的是(A)A、由于程序总是从主函数开始

11、,所以函数的调用总是在主函数和其他函数之间进行。B、函数的调用可以在任意函数之间进行,只要有需要。C、一个函数可以自己调用自己。D、函数返回时可以不必带返回值,这时函数在定义时其类型应用void表示。22、当基类本身也是某一个类的派生类时,底层的派生类也会自动继承间接基类的成员,说明继承具有(B)A、规律性B、传递性C、重复性D、多样性23、派生类的构造函数的成员初始化列表中,不能包含(C)A、基类的构造函数 B、派生类中内嵌对象的初始化C、基类的内嵌对象初始化 D、派生类中一般数据成员的初始化24、派生类的对象对它的基类成员中可以访问的成员是(D)A、私有继承的保护成员B、公有继承的保护成员

12、C、私有继承的公有成员D、公有继承的公有成员25、下面关于break语句的描述中,不正确的是(D)A、break可以用于循环体内。B、break语句可以在for循环语句中出现多次。C、break语句可以在switch语句中出现多次。D、break语句可用于if条件判断语句内。26、下面哪种情况不一定会调用拷贝构造函数(C)A、当用类的一个对象去初始化该类的另一个对象时。 B、若函数的形参为类对象,调用函数时,实参赋值给形参时。C、当用类实例化对象时。D、当函数的返回值是类对象时。27、给对象取一个别名,引入对象的同义词的是(B)A、指针 B、引用 C、枚举 D、结构28、有关析构函数的说法,错

13、误的是(C)A、析构函数有且只有一个。B、析构函数无任何函数类型。C、析构函数和构造函数一样可以有形参。D、析构函数的作用是在对象被撤销时收回先前分配的内存空间。29、通常的拷贝初始化构造函数的参数是(C)A、某个对象名 B、某个对象的成员名C、某个对象的引用名 D、某个对象的指针名30、有以下类的说明,请指出错误的地方(A)class CSample int a = 2;public: CSample(int iVal); CSample( ); CSample( );A、int a = 2; B、CSample();C、CSample(int iVal); D、CSample();三、写出

14、程序的输出结果(共10分)。1、仔细阅读下面程序代码,写出程序的输出结果。(2分) #include using namespace std;classCBase charc;public:CBase(charn) :c(n) virtual CBase( ) cout c endl;classCDerived :publicCBase charc;public:CDerived(charn) :CBase(n+1), c(n) CDerived( ) cout c endl;intmain( ) CDerived obj(X);执行上面的程序,输出结果为:(1) X (2) Y 2、仔细阅读

15、下面程序代码,写出程序的输出结果。(8分)#include using namespace std;class Point public: Point(int xx = 0, int yy = 0) X = xx; Y = yy; Point(Point& p); int GetX() return X; int GetY() return Y; private: int X, Y;Point:Point (Point& p) X = p.X; Y = p.Y; cout 类Point的拷贝构造函数被调用“ endl;class Line public: Line(Point xp1, Poi

16、nt xp2); Line(Line& ln);private: Point p1, p2;Line:Line(Point xp1, Point xp2): p1(xp1), p2(xp2) cout 类Line的构造函数被调用“ endl; Line:Line(Line& ln): p1(ln.p1), p2(ln.p2) cout 类Line的拷贝构造函数被调用“ endl;int main() Point p1(1, 1), p2(3, 4);Line ln1(p1, p2);Line ln2(ln1);执行上面的程序,输出结果为:(1) 类Point的拷贝构造函数被调用 (2) 类Po

17、int的拷贝构造函数被调用 (3) 类Point的拷贝构造函数被调用 (4) 类Point的拷贝构造函数被调用 (5) 类Line的构造函数被调用 (6) 类Point的拷贝构造函数被调用 (7) 类Point的拷贝构造函数被调用 (8) 类Line的拷贝构造函数被调用 四、解答题(共20分)。1、(10分)根据下面描述的类的关系,绘制出相应的UML图形。class CDate ;class CStudentprivate: CDate birth; string name;public:;答:CDateCStudent- birth : CDate- name : string2、(10分)

18、根据下面的UML图形,使用C+语言写出相应的程序代码。CEmployee# m_individualEmpNo : int# m_grade : int# m_accumPay : float+ CEmployee()+ CEmployee()+ IncreaseEmpNo(no : int) : void+ GetindividualEmpNo() : int答:class CEmployeeprotected: int m_individualEmpNo; int m_grade; float m_accumPay; public: CEmployee(); CEmployee();voi

19、d IncreaseEmpNo(int no); int GetindividualEmpNo(); ;五、编程题(共20分)。1、(7分)根据程序要求,实现程序编码。声明一个异常类CMyException,有成员函数Reason( ),用来显示异常的类型。定义函数func( )触发异常,在主函数的try模块中调用func( ),在catch模块中捕获异常,观察程序的执行流程。答:#include using namespace std; class CMyException public:CMyException( ) CMyException( ) const char * Reason(

20、) constreturn CMyException类中的异常!; void func( ) cout 在子函数中触发CMyException类异常! endl;throw CMyException(); int main( ) cout 进入主函数 endl; try cout 在try模块中,调用子函数func( ) endl;func( ); catch(CMyException ex) cout 在catch模块中,捕获到CMyException类型异常:;cout ex.Reason( ) endl; catch(char *str) cout 捕获到其他异常: str endl;

21、cout 回到主函数,异常已被处理! endl;2、(13分)根据程序要求,实现程序编码。编写一个程序,设计一个空间三维点类CMyPoint,即一个空间点有三个坐标。包含:(1)私有数据成员:float x、float y和float z。(2)公有函数成员:带三个默认参数的构造函数CMyPoint(float xx = 0.0, float yy = 0.0, float zz = 0.0);、一个拷贝构造函数CMyPoint(CMyPoint & pt);、一个将点变为负值的函数CMyPoint Negate( );、一个返回该点到原点(0, 0, 0)距离的函数float Distanc

22、e( );和一个输出点坐标的函数void Print( );。答:#include #include using namespace std; class CMyPoint public: CMyPoint(float xx=0.0, float yy = 0.0, float zz = 0.0); CMyPoint(CMyPoint & pt); CMyPoint Negate( ); float Distance( ); void Print( ); private: float x, y, z; ;CMyPoint:CMyPoint(float xx, float yy, float zz) x = xx; y = yy; z = zz; CMyPoint:CMyPoint(CMyPoint & pt) x = pt.x; y = pt.y; z = pt.z; CMyPoint CMyPoint:Negate( ) CMyPoint pt; pt.x = -x; pt.y = -y; pt.z = -z; return pt; float CMyPoint:Distance( )return sqrt(x*x + y*y + z*z); void CMyPoint:Print( ) cout x = x endl y = y endl z = z endl;

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

copyright@ 2023-2025  zhuangpeitu.com 装配图网版权所有   联系电话:18123376007

备案号:ICP2024067431-1 川公网安备51140202000466号


本站为文档C2C交易模式,即用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知装配图网,我们立即给予删除!