您好,欢迎访问三七文档
当前位置:首页 > 电子/通信 > 综合/其它 > 面向对象程序设计练习题1
面向对象程序设计(C++描述)—练习题1一、判断题(1分×5=5分),正确的打“√”,错误的打“×”。答1、类的静态成员函数可以访问类的实例数据成员。……………………………(F)2、this指针是隐含于每一个类的成员函数中的特殊指针,但不包括构造函数和析构函数)。…………………………………………………………………………………(F)3、若类A是类B的友元类,则类B也是类A的友元类。………………………(F)4、在C++中可以使用throw重抛异常。…………………………………………(T)5、命名空间是用来限定名称的解析和使用范围的,以解决命名冲突。…………(T)二、选择题(1.5分×30=45分),每题有四个选项,请将最佳的选项填写到下面表格中。1、下面代码使用文件流,以“写”方式打开文件myfile.txt不正确的是……(D)A、ofstreamoutfile;outfile.open(myfile.txt,ios::out);B、ofstreamoutfile(myfile.txt);C、fstreamoutfile(myfile.txt,ios::out);D、ifstreamoutfile(myfile.txt);2、考虑下列程序:#includeiostreamusingnamespacestd;intmain(){boolbFlag=true;inti=2010;while(bFlag);{if(i%2==0){cout“偶数”endl;bFlag=false;}else{cout“奇数”;i++;}}}关于编译上述程序下列哪个正确?……………………………………(D)A、程序编译成功,执行后输出“偶数”。B、程序编译成功,执行后没有输出。C、程序编译成功,执行后输出“奇数偶数”。D、程序编译不成功,产生一些错误。3、在语句coutdata;中,cout是…………………………………(D)A、C++的关键字B、类名C、函数名D、对象名4、分析下列程序:#includeiostreamusingnamespacestd;classCTest{public:CTest(){cout”调用构造函数!”endl;}};intmain(){CTestobj;}下面分析正确的是……………………………………………………………(A)A、程序编译成功,执行后输出字符串“调用构造函数!”。B、程序编译成功,执行后没有输出。C、程序编译失败。D、程序编译成功,执行后输出一组废字符。5、已知intx=5;则下列表示引用的方法中,正确的是…………………(D)A、int&r;B、int&r=5;C、int&r=&x;D、float&r=x;6、考虑下列程序:#includeiostreamusingnamespacestd;classCBase{public:CBase(){cout”CATS”;}};classCDerived:protectedCBase{public:~CDerived(){cout”TIGERS”;}};intmain(){CDerivedobj;}程序执行后输出为……………………………………………(A)A、CATSTIGERSB、TIGERSCATSC、CATSD、TIGERS7、考虑下列程序:#includeiostreamusingnamespacestd;classCA{public:virtualvoidfunc()=0;};classCB{public:voidfunc(){cout”CallB”;}};classCC:publicCA,publicCB{public:virtualvoidfunc(){cout”CallC”;}};intmain(){CA*ptr=newCC;ptr-func();}关于编译上述程序下列哪条语句正确?……………………………(A)A、程序成功编译,执行后输出”CallC”。B、程序编译错误。C、程序成功编译,执行后没输出。D、程序成功编译,执行后输出”CallB”。8、下列哪个函数说明表示后缀一元运算符++的重载?………………(A)Aintoperator++(int)Bintoperator++()Cintoperator++(int&)Dintoperator++(void&)9、在C++中,下面四组代码中的函数说明:Group1:classCA{voidprint();voidprint()const;}Group2:charfunc(int,char);intfunc(int,char);Group3:floatadd(float,int);floatadd(int,float);Group4:intsquare(int);floatsquare(int*);哪组不是重载的函数?………………………………………………………(B)AGroup1BGroup2CGroup3DGroup410、在intb[][4]={{1},{4,3,2,1},{4,5,6,7},{0}};中b[1][2]的值是…(B)A、4B、2C、5D、011、考虑函数原型voidtest(inta=0,char*p=*),下面的函数调用中,属于不合法调用的是………………………………………………………………(C)A、test();B、test(1);C、test(,#);D、test(1,*);12、下面有关函数重写的说法中正确的是……………………………………(D)A、重写函数必须具有不同的返回值类型。B、重写函数的函数名可以不同。C、重写函数必须有不同的形参列表。D、重写函数和被重写函数在不同类中。13、下列关于构造函数的描述中,错误的是………………………………(D)A、构造函数可以设置默认参数。B、构造函数可以不带参数。C、构造函数可以是内联函数。D、构造函数不可以重载。14、下面描述中,表达错误的是………………………………………………(A)A、保护继承时基类中的public成员在派生类中仍是public的。B、私有继承时派生类中的成员函数可以直接访问基类中的protected成员。C、私有继承时基类中的public成员在派生类中是private的。D、公有继承时基类中的protected成员在派生类中仍是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、构造函数不能重载,析构函数也不能重载。B、构造函数可以重载,析构函数也可以重载。C、构造函数不能重载,析构函数可以重载。D、构造函数可以重载,析构函数不能重载。19、设变量i的数据类型是int,f的数据类型是float,d的数据类型是double,则表达式10+'i'+d*f值的数据类型为……………………………………………(C)A、intB、floatC、doubleD、不确定20、下列关于抽象类的描述中,不正确的是…………………………(D)A、在程序中不能说明抽象类的对象。B、在程序中可以声明指向抽象类对象的指针。C、含有纯虚函数的类称为抽象类。D、抽象类有且只能有一个纯虚函数。21、关于函数的调用下面不正确的是……………………………(A)A、由于程序总是从主函数开始,所以函数的调用总是在主函数和其他函数之间进行。B、函数的调用可以在任意函数之间进行,只要有需要。C、一个函数可以自己调用自己。D、函数返回时可以不必带返回值,这时函数在定义时其类型应用void表示。22、当基类本身也是某一个类的派生类时,底层的派生类也会自动继承间接基类的成员,说明继承具有……………………………………………(B)A、规律性B、传递性C、重复性D、多样性23、派生类的构造函数的成员初始化列表中,不能包含……………(C)A、基类的构造函数B、派生类中内嵌对象的初始化C、基类的内嵌对象初始化D、派生类中一般数据成员的初始化24、派生类的对象对它的基类成员中可以访问的成员是………………(D)A、私有继承的保护成员B、公有继承的保护成员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、有关析构函数的说法,错误的是………………………………………(C)A、析构函数有且只有一个。B、析构函数无任何函数类型。C、析构函数和构造函数一样可以有形参。D、析构函数的作用是在对象被撤销时收回先前分配的内存空间。29、通常的拷贝初始化构造函数的参数是……………………………(C)A、某个对象名B、某个对象的成员名C、某个对象的引用名D、某个对象的指针名30、有以下类的说明,请指出错误的地方…………………………………(A)classCSample{inta=2;public:CSample(intiVal);CSample();~CSample();};A、inta=2;B、CSample();C、CSample(intiVal);D、~CSample();三、写出程序的输出结果(共10分)。1、仔细阅读下面程序代码,写出程序的输出结果。(2分)#includeiostreamusingnamespacestd;classCBase{charc;public:CBase(charn):c(n){}virtual~CBase(){coutcendl;}};classCDerived:publicCBase{charc;public:CDerived(charn):CBase(n+1),c(n){}~CDerived(){coutcendl;}};intmain(){CDerivedobj(’X’);}执行上面的程序,输出结果为:(1)X(2)Y2、仔细阅读下面程序代码,写出程序的输出结果。(8分)#includeiostreamusingnamespacestd;classPoint{public:Point(intxx=0,intyy=0){X=xx;Y=yy;}Point(Point&p);intGetX(){returnX;}intGetY(){returnY;}private:intX,Y;};Point::Point(Point&p){X=p.X;Y=p.Y;cout类Point的拷贝构造函数被调用“endl;}classLine{public:Line(Pointxp1,Pointxp2);Line(Line&ln);private:Pointp1,p2;};Line::Line(Pointxp1,Pointxp2):p1(xp1),p2(xp2){cout类Line的构造函数被调用“endl;}Line::Line(Line&ln):p1(ln.p1),p2(ln.p2){cout类Line的拷贝构造函数被调用“endl;
本文标题:面向对象程序设计练习题1
链接地址:https://www.777doc.com/doc-1981319 .html