您好,欢迎访问三七文档
当前位置:首页 > 医学/心理学 > 药学 > C++二级试题选择题练习(带注解,答案)
1.以下运算符函数中肯定不属于类FunNumber的成员函数的是__D____。本题考查的是类的成员函数。选项A是重载了负号或减法运算符,由于减法运算符它具有两个操作数,而题面原型中只有一个,如果重载的是减号运算符,则必为成员函数。选项B中由于没参数,无论是负号或减法运算符至少具有一个参数,所以它必为成员函数,同时也必定是重载了负号运算符。选项C是必定以成函数的方式重载,因为C++规定不能对内置类的运算符进行重载,所以它不可能是友元函数(因为操作数为内置的int型),所以必为成员函数重载,且必定是重载了减法运算符。选项D有两个参数,无论是负号或减法运算符,其操作数不超2个,所以必定为友元函数重载,且重载了减法运算符。故本题答案为D。2.运算符重载是对已有的运算符赋予多重含义,因此__C____。本题主要考查了运算符重载。C++在重载运算符时,必须符合下面的条件:1、不能重载内置C++数据类型(如int,double等类型)的运算符的含义;2、不能定义C++中没有的运算符;3、不能改变重载运算符的优先级与操作数的个数;4、有些运算符不能被重载,如域运算符(::),条件运算符(?:)等,具体哪些运算符不能被重载与编译器有关。3.有如下程序:#includeiostreamusingnamespacestd;classComplex{doublere,im;public:Complex(doubler,doublei):re(r),im(i){}doublereal()const{returnre;}doubleimage()const{returnim;}Complex&operator+=(Complexa){re+=a.re;im+=a.im;return*this;}};ostream&operator(ostream&s,constComplex&z){returns'('z.real()','z.image()')';}intmain(){Complexx(1,-2),y(2,3);cout(x+=y)endl;return0;}执行这个程序的输出结果是_(3,1)_____。4.在重载一个运算符为成员函数时,其参数中没有任何参数,这说明该运算符是__A____。A.前缀一元运算符B.二元运算符C.后缀一元运算符D.无操作数运算符5.下面程序中对一维坐标点类Point进行运算符重载#includeiostreamusingnamespacestd;classPoint{public:Point(intval){x=val;}Point&operator++(){x++;return*this;}Pointoperator++(int){Pointold=*this;++(*this);returnold;}intGetX()const{returnx;}private:intx;};intmain(){Pointa(10);cout(++a).GetX();couta++.GetX();return0;}编译和运行情况是_运行时输出1111_____。本题考查的是运算符重载。对于++,--运算符有前置与后置两种方式,在以成元函数方式重载该运算符时,对于前置运算符可以以通常的一元运算的方式进行重载,对于后置运算符,则需在参数列表中加一个辅助类型的参数,以便于前置运算符区别。本题的输出结果为1111。6.关于虚函数,下列表述正确的是__B____。本题考查的是虚函数的一些基本概念。在成员函数前加上virtual修饰,即把该函数声明为虚函数。虚函数可以是另一个类的友元函数,但不得是静态成员函数。故本题选B。7.下列关于虚函数的说明中,正确的是_A_____。8.有如下程序:#includeiostreamusingnamespacestd;classBase{public:voidoutput(){cout1;}virtualvoidPrint(){cout'B';}};classDerived:publicBase{public:voidoutput(){cout2;}voidPrint(){cout'D';}};intmain(){Base*ptr=newDerived;ptr-output();ptr-Print();deleteptr;return0;}程序的输出结果是__1D____。virtualvoidPrint(){cout'B';}表示这方法是虚函数,虚函数的意思是如果子类有继承这虚函数,则子类的对象在执行此方法时调用子类的此方法。否则会调用基类的此方法。在此程序中Derived是子类,Base是基类,Base*ptr=newDerived;创建一个子类的对象给基类的指针对象。ptr-output();因为指针ptr是基类的对象。所以在执行output()方法时会调用基类的output()方法,也就是Base类的output()方法。不会调用Derived类的output()方法,因为output()不是虚函数。输出1。ptr-Print();因为Print();在基类Base中申明是虚函数,所以在子类中如果有继承此方法就会调用子类的这方法。所以这个调用的是Derived类的Print();方法。输出D。故本题答案为B。9.在C++中用来实现运行时多态性的是__虚函数____。10.下列关于派生类的描述中错误的是__D____。本题考查了派生类的基本概念。继承方式有3种:公有继承、私有继承和保护继承。如果不显式地给出继承方式,缺省的继承方式是私有继承。派生类从基类继承来所有的成员,但是基类的私有成员派生类是不可直接访问的。所以本题选D。11.下列说法中错误的是__B____。题考查的是继承的类型。类的继承方式有公有继承、保护继承和私有继承三种方式。对于公有继承基类中的成员访问属性不变,对于保护和私有继承基类中的成员转换为相应的访问类型。但是如果基类成员的访问属性为private的,则不能被继承。故本题选B。12.如果不使用多态机制,那么通过基类的指针虽然可以指向派生类对象,但是只能访问从基类继承的成员。有如下程序,没有使用多态机制。#includeiostreamusingnamespacestd;classBase{inta,b;public:Base(intx,inty){a=x;b=y;}voidshow(){couta','bendl;}};classDerived:publicBase{intc,d;public:Derived(intx,inty,intz,intm):Base(x,y){c=z;d=m;}voidshow(){coutc','dendl;}};intmain(){BaseB1(50,50),*pb;DerivedD1(10,20,30,40);pb=&D1;pb-show();return0;}运行时输出的结果是_10,20_____。本题考查的是继承与多态。由于函数show是非虚拟的,故其调用依据其指针类型决定,而pb是一个指向Base的指针,故在调用show时,将调用Base::show,输出成员变量a,b,而pb是指向变量D1的,D1在实例化时,将基类中a,b初始化为10、20,故本题的输出为10,20。13.voiddispb(){dispa();coutxendl;}private:intx;};intmain(){Bb(2);b.dispb();return0;}运行时输出的结果是_12,2_____。本题考查的是类的继承与实例化。Bb(2);以整数2实例化变量b,在执行B的构造函数时,以i+10即12去调用类B的父类的构造函数,从而将A::x初始化为12,然后将B::x赋值为2。在执行b.dispb()时,先调用了父类中dispa,输出A::x,即12,再输出B::x,即2,从而运行结果为12,214.下列说法中错误的是__B____。本题考查了派生类的定义和访问权限。当以public方式继承时,基类成员中private成员不能被访问,public成员在子类中仍是public成员,protected成员仍是protected成员。当以protected方式继承时,基类成员中private成员不能被访问,public成员与protected成员在子类中均是protected成员。当以private方式继承时,基类成员中private成员不能被访问,public成员与protected成员在子类中均是private成员。15.有以下程序:#includeiostreamusingnamespacestd;classBase{public:Base(intx=0){coutx;}};classDerived:publicBase{public:Derived(intx=0){coutx;}private:Baseval;};intmain(){Derivedd(1);return0;}程序的输出结果是_001____。本题考查的是类的相关知识。Baseval;因为类Derived有个Base类的对象val为私有变量。所以在给这类创建对象时会创建Baseval;对象。在Derivedd(1);创建对象d时先创建Base的对象val,执行Base类的Base(intx=0){coutx;}方法,输出0;接着创建类Derived对象d执行类Derived的带一个参数的构造方法Derived(intx=0){coutx;},在执行前因为类Derived是公共继承类Base所以先执行基类的构造方法Base(intx=0){coutx;}输出0(这个方法是给参数赋默认值的;intx=0意思是如果没有传参数过来就以0表示这个参数的值);执行完基类的构造方法后执行自已的构造方法。因为传的参数为1所以输出1。16.在下面的类定义中,横线处应填入的内容是__intFred::____。classFred{public:voidprint(){coutdataendl;}voidsetData(doubled){data=d;}staticintcount;private:doubledata;};count=0;//静态数据成员定义17.有如下程序:#includeiostreamusingnamespacestd;classTest{public:Test(){n+=2;}~Test(){n-=3;}staticintgetNum(){returnn;}private:staticintn;};intTest::n=1;intmain(){Test*p=newTest;deletep;coutn=Test::getNum()endl;return0;}执行后的输出结果是__n=0____。本题主要考查了C++中类的静态成员。由于n是类Test的静态成员,该成员被类的所有实例共享。当程序执行newTest操作时,类的构造函数将被执行,执行后Test::i的值为3,调用deletep后将执行Test的析构函数,执行后,i的值将减3,此时Test::i的值为0。Test::getNum()为Test类的一个静态成员函数,其作用是返回私有静态成员变量i的值,故本题输出为n=0,18.假定MyClass为一个类,则该类的拷贝构造函数的声明语句为___MyClass(MyClass&x)___。19.类的默认的无参构造函数___A___20.对于下面的类定义,如果要为其添加一个析构函数,对于析构函数定义正确的是_~MyFirst(){}_____。classMyFirst{private:inta;public:MyFirst(intgiva_a=0){a=give_a;}}21.下面类定义中错误的语句是__A_
本文标题:C++二级试题选择题练习(带注解,答案)
链接地址:https://www.777doc.com/doc-2901589 .html