C++面向对象程序设计题库(含答案)_第1页
C++面向对象程序设计题库(含答案)_第2页
C++面向对象程序设计题库(含答案)_第3页
已阅读5页,还剩101页未读 继续免费阅读

下载本文档

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

文档简介

【精品】C++面向对象程序设计题库(含答案)C++面向对象程序设计试题集一、填空题(每空2分,共20分)a、b、cinta=(b=4)+(c=2)后,a__,b在派生类的成员中有公有成员、、、四类成员。3.Sampledatadata。请将类定义补充完整。classSample{public:Sample(intdata=0);Private:intdata;};Sample::Sample(intdata){4.面向对象程序设计的机制提供了重复利用程序资源的一种途径。5.发生在利用现有类派生新类时,其中现有类称为,或父类;派生的新类称为,6.若表达式(x+(y-z)*(m/n))+3double7.an,i的元素移i,11?i,nn=4,aa2,3,4,4。请将语句补充完整:for(inti=0;i<n-1;i++)a[i]=。SampledatadataclassSample{public:Sample(intPrivate:intdata;};Sample::Sample(intdata){}实现运行时多态,要使用函数。AtesttestB(A);表示。12.在MyClass整。MyClass::operator=(constMyClassrhs){if(this=&rhs)return*this;value=rhs.value;return*this;}C++语言中的每条基本语句以 作为结束符,每条复合语句以 作为结束符。若p指针指向字符串“ABCDEFGHIJKL”,则语句cout<<*(p+5);的输出果是 。将该函数声名为另一个类的 或 。设px是指向一个类动态对象的指针变量,则执行“deletepx”语句时将自动调用该类的 函数。C++中没有字符串类型,字符串是通过 来表示的,每一个字符都有一个结尾字符 。使用const语句定义一个标识符常量时,则必须对它同时进行 。test建立对象时,为节省内存,系统只给 分配内存。类中的数据和成员函数默认访问类型为。当建立一个新对象时,程序自动调用 。22.23.在C++中,函数的参数有两种传递方式,它们是值传递和 。若表达式(x+(y-z)*(m/n))+3中的变量均为double型,则表达式值的类型为。25.循环语句:for(inti=50;i>20;i-=2)cout<<i<<?,?;运行时循环体的执行次数是26.任何类中允许有三种访问权限的数据,这三种访问权限分别是public、、27.类是用户定义的类型,具有类类型的变量称为。当建立一个新对象时,程序自动调用。28.利用成员函数对二元运算符重载,其左操作数为,右操作数为。29.C++将类继承分为和两种。派生类可以定义其 中不具备的数据和操作。有如下类定义:classSample{public:Sample();~Sample();private:staticintdate;};将静态数据成员data初始化为0的语句是。在保护继承方式下,基类的公有和保护成员成为派生类中的成员。若表达式(x+(y-z)*(m/n))+3doubletest在保护继承关系下,基类的公有成员和保护成员将成为派生类中的成员。36.37.在派生类的成员中有私有成员、、四类成员。38.在继承机制下,当对象消亡时,编译系统先执行的析构函数,然后才执行派生类中子对象类的析构函数,最后执行的析构函数。39.CC++语言中,编程的单位是。40.若表达式(x+(y-z)*(m/n))+3double41.面42.private43.括、、三个步骤。44.C++程序的头文件和源程序文件扩展名分别为和。45.循环语句:for(inti=50;i>20;i-=2)cout<<i<<?,?;运行时循环体的执行次数是类中构造函数有个,析构函数有个。classSample{public:Sample();~Sample();private:staticintdate;};将静态数据成员data初始化为0的语句是。p25,p+146,则执行“(*p)++;”语句后,p若在类的定义体中只给出了一个成员函数的原型,则在类外给出完整定时,其函数名前必须加上类名和两个 分隔符。若需要把一个函数“voidF(ABAB若要把类外定义的成员函数规定为内联函数,则必须把 关键字到函数原型或函数头的前面。(为了避免在调用成员函数时修改对象中的任何数据成员,则应在定义成员函数时,在函数头的后面加上 关键字。i=5;j=0;j=++i+j;j=。类定义中,既包含数据成员,也包含 成员。AB“ABa[10];”假定一个类对象数组为A[N],当离开它的作用域时,系统自动调用该类构函数的次数为 。an,ii,11?i,nn=4,a1,2,3,4a2,3,4,4。请将语句补充完整:for(inti=0;i<n-1;i++)a[i]=。是指对已有的运算符赋予多重含义。声明一个抽象类的指针或引用。若表达式(x+(y-z)*(m/n))+3double为。61.AtesttestB(A);表示。62.利用“对象名.成员变量”形式访问的对象成员仅限于被声明为的成员;若要访问其他成员变量,需要通过函数或函数。63.是指同样的消息被不同类型的对象接收时导致不同的行为。64.在继承机制下,当对象消亡时,编译系统先执行的析构函数,然后才执行派生类中子对象类的析构函数,最后执行的析构函数。65.类中构造函数有个,析构函数有个。66.循环语句:for(inti=50;i>20;i-=2)cout<<i<<’,’;运行时循环体的执行次数是有如下类定义:classSample{public:Sample();~Sample();private:staticintdate;};将静态数据成员data初始化为0的语句是。为,或子类。若要访问其他成员变量,需要通过函数或函数。220类中定义的成员默认为()访问属性。A.publicB.privateC.protectedD.friend如果一个函数无返回值,定义时它的函数类型应是()。A(任意B(intC(voidD(无下面的函数声明中,()是“voidBC(inta,intb);”的重载函数。A(intBC(intx,inty);B(voidBC(inta,charb);C(floatBC(inta,intb,intc=0);D(intBC(inta,intb=0);Cprintf(“Helloword\n”)C++语句是()。A.cout>>”Helloword\n”B.cin>>”Helloword\n”C.cout<<”Helloword\n”D.cin<<”Helloword\n”ABAB返回相加结果,则该成员函数的声明语句为()。A.ABoperator+(AB&a,AB&b)B.ABoperator+(AB&a)C.operator+(ABa)D.AB&operator+(以下不正确的语句是()。A(if(x>y);B(if(x=y)&&(x!=0)C(if(x!=y)cin>>x;elsecin>>y;D(if(x<y){x++;y++;}intx=-1;do{x=x*x;}while(!x);下列说法正确的是()。A(是死循环B(循环执行两次C(循环执行一次D(有语法错误下面函数()的表示方法说明它使用对象的引用作为参数。A.test(pt*p)B.test(ptp)C.test(pt&p)D.test(constP)下面叙述不正确的是()。A(基类的保护成员在派生类中仍然是保护的B(C(基类的保护成员在私有派生类中是私有的D(对基类成员的访问必须是无两义性C++A.,:B.+C.-D.〈=C++是取消这种关联。A.流B.类C.结构D.对象while、do…whileA(只是表达形式不同B(do…whileC(whileD(条件成立时,它们有可能一次也不执行关于函数的调用下面不正确的是()。A(由于程序总是从主函数开始,所以函数的调用总是在主函数和其他函数之间进行B(函数的调用可以在任意函数之间进行,只要有需要C(一个函数可以自己调用自己D(void关于函数的声明和定义正确的是()。A(函数的声明是必须的,只有这样才能保证编译系统对调用表达式和函数之间的参数进行检测,以确保参数的传递正确B(函数的定义和声明可以合二为一,可以只有函数定义即可C(函数在声明时,其参数标识符可省略,但参数的类型、个数与顺序不能省略D(函数的存储类型为外部型,所以可以在其他函数中被调用,它在定义时象其他外部变量一样,可以在其他函数内定义用于类中虚成员函数说明的关键字是()。A.publicB.virtualC.protectedD.private有如下程序段:inti=5;while(inti=0){cout<<"*";i--;}运行时输出“*”的个数是()A.0B.1C.5D.无穷运算符重载时不需要保持的性质是()A.操作数个数B.操作数类型C.优先级D.结合性有如下类定义和变量定义:classA{public:A(){data=0;}~A(){}intGetData()const{returndata;}voidSetData(intn){data=n;}intdata;};constAa;Ab;下列函数调用中错误的是()A.a.GetData();B.a.SetData(10);C.b.GetData();D.b.SetData(10);对类的构造函数和析构函数描述正确的是()构造函数可以重载,析构函数不能重载;构造函数不能重载,析构函数可以重载;构造函数可以重载,析构函数也可以重载;下列有关类的说法不正确的是()。A(对象是类的一个实例B(任何一个对象只能属于一个具体的类C(一个类只能有一个对象D(类与对象的关系和数据类型与变量的关系相似()的功能是对象进行初始化。A(析构函数B.数据成员C.构造函数D.静态成员函数关于友元的描述中,()是错误的。A(友元函数是成员函数,它被说明在类体内B(友元函数可直接访问类中的私有成员C(友元函数破坏封装性,使用时尽量少用D(友元类中的所有成员函数都是友元函数为了使类中的某个成员不能被类的对象通过成员操作符访问,则不能把该成员的访问权限定义为()。publicB.protectedC.privateD.A.静态数据成员是类的所有对象共享的数据C.类的不同对象有不同的静态数据成员值D.静态数据成员不能通过类的对象调用下列表达方式正确的是()。A(classP{B(classP{public:public:intx=15;intx;voidshow(){cout<<x;}voidshow(){cout<<x;}};}C(classP{D.classP{intf;public:};inta;f=25;voidSeta(intx){a=x;}以下叙述中不正确的是():一个类的所有对象都有各自的数据成员,它们共享函数成员;在一个类中可以声明另一个类的对象作为它的数据成员;类与对象的关系和数据类型与变量的关系相似;一个对象可以属于多个类。对于一个功能不太复杂,并且要求加快执行速度,选用()合适A(内置函数BC(递归调用D(嵌套调用SampleSampleSamplea[2],*p=newSample;A.0B.1C.2D.3FAFB,若要把这两个函数定义在同一个文件中,则()A.FAFBB.FB必须定义在FA之前C.FAFBFAFBDFBFAFBFAoperator运算符函数的参数可以是对象运算符函数只能定义为类的成员函数下面描述中,正确的是()。A(virtualB(含有纯虚函数的类是不可以用来创建对象的,因为它是虚基类C(既使基类的构造函数没有参数,派生类也必须建立构造函数D(静态数据成员可以通过成员初始化列表来初始化下列对基类和派生类关系的描述中,错误的是()。A.派生类是基类的具体化B.派生类是基类的子集C.派生类是基类定义的延续D.基类是派生类的抽象C++语言对C语言做了很多改进,C++语言相对于C语言的最根本的变化是()。A(增加了一些新的运算符B.允许函数重载,并允许设置缺省参数C(规定函数说明符必须用原型D.引进了类和对象的概念下列表示引用的方法中,()是正确的。已知:intk=1000;A(int&x=k;B(char&y;C(int&z=1000;D(float&t=&k;A(友元函数的实现必须在类的内部定义B(友元函数是类的成员函数C(数破坏了类的封装性和隐藏性D(ABA.3B.4C.6D.9以下不属于构造函数特征的是()A.构造函数名与类名相同B.构造函数可以重载C.构造函数可以设置默认参数D.构造函数必须指定函数类型下列定义中,XpA(X*p[4]B(X(*p)[4]C((p[4]D(X*p[]XClass(MyClassx)B(MyClass&(MyClassx)C(MyClass(MyClass&x)D(MyClass(MyClass*x)以下正确的说法是()。A.实参和其对应的形参各占用独立的存储单元。B.实参和其对应的形参共占用一个存储单元。C.只有当实参和与其对应的形参同名时才共占用存储单元。D.形参是虚拟的,不占用存储单元。下列关于多态性的描述,错误的是()。A(C++B(编译时的多态性可通过函数重载实现C(运行时的多态性可通过模板实现D(实现运行时多态性的机制称为动态绑定C++编译器区分重载函数无任何意义的信息是()A.参数类型BC.返回值类型D..参数顺序newA(它可以用来动态创建对象和对象数组B(DELETEC(使用它创建对象时要调用构造函数D(使用它调用对象数组时不许指定初始值如果一个类至少有一个纯虚函数,那么就称该类为()。A(抽象类B(派生类C(纯基类D(以上都不对有如下程序:#include<iostream>usingnamespaceclassA{public:virtualvoidf(){cout<<1;}voidg(){cout<<2;}};classB:publicA{public:virtualvoidf(){cout<<3;}voidg(){cout<<4;}};voidshow(A&a){a.f();a.g();}intmain(){Bb;show(b);return0;}运行时的输出结果是()A.12B.34C.14D.32下列虚基类的声明中,正确的是()A.classvirtualB:publicAB.virtualclassB:publicAC.classB:publicAvirtualD.classB:virtualpublicA派生类的对象对它的基类成员中()是可以访问的。A.公有继承的公有成员B.公有继承的私有成员C.公有继承的保护成员D.私有继承的公有成员已知数组arr的定义如下:intarr[5]={1,2,3,4,5};下列语句中输出结果不是2的是()A.cout<<*arr+1<<endl;B.cout<<*(arr+1)<<endl;C.cout<<arr[1]<<endl;D.cout<<*arr<<endl;C++A(?:B([]C(newD(&&有如下程序:#include<iostream>usingnamespaceclassA{public:virtualvoidf(){cout<<1;}voidg(){cout<<2;}};classB:publicA{public:virtualvoidf(){cout<<3;}voidg(){cout<<4;}};voidshow(A&a){a.f();a.g();}intmain(){Bb;show(b);return0;}运行时的输出结果是()A(12B(34C(14D(32有如下程序段:inti=4;intintmain(){inti=8,j=i;cout<<i<<j<<endl;}A(44B(41C(88D(81下列情况中,不会调用拷贝构造函数的是()。A(用一个对象去初始化同一类的另一个新对象时B(将类的一个对象赋予该类的另一个对象时C(函数的形参是类的对象,调用函数进行形参和实参结合时D(函数的返回值是类的对象,函数执行返回调用时下面对静态数据成员的描述中,正确的是()。A(B(C(类的不同对象有不同的静态数据成员值D(静态数据成员不能通过类的对象调用下面的函数调用fun(a+b,3,max(n-1)*b)funA(3B(4C(5D(6已知函数fun的原型为intfun(int,int,int)下列重载函数原型中错误的是()A.charfun(int,int);B.doublefun(int,int,double);C.intfun(int,char*);D.floatfun(int,int,int);下面描述中,正确的是()。A(virtualB(含有纯虚函数的类是不可以用来创建对象的,因为它是虚基类C(即使基类的构造函数没有参数,派生类也必须建立构造函数D(静态数据成员可以通过成员初始化列表来初始化有如下类定义:classintk;public:MyBase(intn=0):k(n){}intvalue()const{returnk;}};classMyDerived:intj;public:MyDerived(inti):j(i){}intgetK()const{returnintgutj()const{returnj;}};编译时发现有一处语法错误,对这个错误最佳准确的描述是()A(MyDerivedMyBasepublicprotectedprivateB(getKC(MyDerived缺少一个无参的构造函数D(MyDerivedk关于多继承二义性的描述,()是错误的。A(派生类的多个基类中存在同名成员时,派生类对这个成员访问可能出现二义性B(派生类和它的基类中出现同名函数时,将可能出现二义性C(一个派生类是从具有共同的间接基类的两个基类派生来的,派生类对该公共基类的访问可能出现二义性D(解决二义性最常用的方法是作用域运算符对成员进行限定有如下的运算重载函数定义:doubleoperator+(inti,intk){returndouble(i+k);}但定义有错误,对这个错误的最准确的描述是()。A(+只能作为成员函数重载,而这里的+是作为非成员函数重载的B(intintC(没有将运算符重载函数声明为某个类的友元D(C++int关于友元的描述中,()是错误的。A(友元函数是成员函数,它被说明在类体内B(友元函数可直接访问类中的私有成员C(友元函数破坏封装性,使用时尽量少用D(友元类中的所有成员函数都是友元函数classParents{public:intpublicData;private:intprivateData;};classChildA:publicParents{/*类体略*/};classChildB:privateParents{/*类体略*/};ChildAa;ChildBb;下面语句中正确的是:()A.cout<<a.publicData<<endl;B.cout<<a.privateData<<endl;C.cout<<b.publicData<<endl;D.cout<<b.privateData<<endl;对C++编译器区分重载函数无任何意义的信息是()A(参数类型B(参数个数C(返回值类型D(下面的程序段的运行结果为()charstr[]="job",*p=str;cout<<*(p+2)<<endl;A)98B)无输出结果C)字符’b’的地址D)字符’b’已知表达式++a++aA(a.operator++(1)B(operator++(a)C(operator++(a,1)D(a.operator++()A(&&B(!=C(.(成员访问运算符)D(已知有数组定义chara[3][4];下列表达式中错误的是()a[2]=”WIN”B.strcpy(a[2],”WIN”)C.a[2][3]=?W?D.a[0][1]=a[0][1]有如下程序:#include<iostream>usingnamespacestd;classToy{public:Toy(char*_n){strcpy(name,_n);count++;}~Toy(){count--;}char*GetName(){returnname;}staticintgetCount(){returncount;}private:charname[10];staticintcount;intToy::count=0;intmain(){Toyt1(“Snoopy”),t2(“Mickey”),t3(“Barbie”);cout<<t1.getCount()<<endl;return0;}运行时的输出结果是()B.2C.3D.运行时出错将运算符重载为类成员函数时,其参数表中没有参数,说明该运算是()A(不合法的运算符B(一元运算符C(无操作数的运算符D(二元运算符有如下程序:#include<iostream>usingnamespacestd;classToy{public:Toy(char*_n){strcpy(name,_n);count++;}~Toy(){count--;}char*GetName(){returnname;}staticintgetCount(){returncount;}private:charname[10];staticintcount;intToy::count=0;intmain(){Toyt1(“Snoopy”),t2(“Mickey”),t3(“Barbie”);cout<<t1.getCount()<<endl;return0;}运行时的输出结果是()A(1B(2C(3D(运行时出错有如下两个类定义classAA{};classBB{AAv1,*v2;BBv3;int*v4;};其中有一个成员变量的定义是错误的,这个变量是()A(v1B(v2C(v3D(v4有如下类定义:classXX{intxdata;public:XX(intn=0):xdata(n){}};classYY:publicXX{intydata;public:YY(intm=0,intn=0):XX(m),ydata(n){}};YY类的对象包含的数据成员的个数是()A(1B(2C(3D(4字符串常量"MyName\n"在内存中需要占用()字节A(6B(7C(8D(9A(classP{B(classP{public:public:intx=15;intx;voidshow(){cout<<x;}voidshow(){cout<<x;}};}C(classP{D.classP{intf;public:};inta;f=25;voidSeta(intx){a=x;}关于友元的描述中,()是错误的。A(友元函数是成员函数,它被说明在类体内B(友元函数可直接访问类中的私有成员C(友元函数破坏封装性,使用时尽量少用D(友元类中的所有成员函数都是友元函数有如下程序段:inti=4;intj=1;intmain(){inti=8,j=i;cout<<i<<j<<endl;}运行时的输出结果是()A(44B(41C(88D(81已知表达式++a++a算符函数调用形式为()A(a.operator++(1)B(operator++(a)C(operator++(a,1)D(a.operator++()#include<iostream>usingnamespacestd;classTest{public:Test(){}~Test(){cout<<'#';}};intmain(){Testtemp[2],*pTemp[2];return0;}执行这个程序输出星号(#)的个数为()。A(1B(2C(3D(4关于多继承二义性的描述,()是错误的。A(派生类的多个基类中存在同名成员时,派生类对这个成员访问可能出现二义性B(一个派生类是从具有共同的间接基类的两个基类派生来的,派生类对该公共基类的访问可能出现二义性C(解决二义性最常用的方法是作用域运算符对成员进行限定D(派生类和它的基类中出现同名函数时,将可能出现二义性将运算符重载为类成员函数时,其参数表中没有参数,说明该运算是()A(不合法的运算符B(一元运算符C(无操作数的运算符D(二元运算符有如下程序#include<iostream>usingnamespacestd;classA{public:A(inti):r1(i){}voidprint(){cout<<?E?<<r1<<?-„;}voidprint()const{cout<<?C?<<r1*r1<<?-„;}private:intr1;};intmain(){Aal(2);constAa2(4);al.print();a2.print();return0;}运行时的输出结果是()A(运行时出错B(E2-C16-C(C4-C16-D(E2-E4-下列有关运算符函数的描述中,错误的是()A(运算符函数的名称总是以operator为前缀B(运算符函数的参数可以是对象C(运算符函数只能定义为类的成员函数D(thisthisthisC.this虚函数表的指针D.this有如下程序段:inti=5;while(inti=0){cout<<"*";i--;}运行时输出“*”的个数是()A.0B.1C.5D.无穷下列有关内联函数的叙述中,正确的是()。A(内联函数在调用时发生控制转移B(内联函数必须通过关键字inline来定义C(内联函数是通过编译器来实现的D(return一个类可包含析构函数的个数是()A(0B(1C(至少一个D(0关于虚函数的描述中,正确的是()。A(staticB(虚函数是一个非成员函数C(基类中说明了虚函数后,派生类中将其对应的函数可不必说明为虚函数D(派生类的虚函数与基类的虚函数具有不同的参数个数和类型下面对于友元函数描述正确的是()A(友元函数的实现必须在类的内部定义B(友元函数是类的成员函数C(友元函数破坏了类的封装性和隐藏性D(友元函数不能访问类的私有成员在公有派生情况下,有关派生类对象和基类对象的关系,下列叙述不正确的是()A(派生类的对象可以赋给基类的对象B(C(派生类的对象可以直接访问基类中的成员D(派生类的对象的地址可以赋给指向基类的指针下列关于虚基类的描述,错误的是()A(设置虚基类的目的是为了消除二义性B(虚基类的构造函数在非虚基类之后调用C(只有最远派生类的构造函数调用虚基类的构造函数D(若虚基类由非虚基类派生而来,则仍然先调用基类构造函数,再调用派生类的构造函数下面描述中,表达错误的是()A(publicpublicB(公有继承是privateprivateC(公有继承时基类中的protectedprotectedDpublicprivate10.newA(它可以用来动态创建对象和对象数组B(deleteC(象时要调用构造函数D(使用它创建对象数组时必须指定初始值if语句的语法格式可描述为1:if(<或格式2:if(<条件>)<语句1>else<语句2>关于上面的语法格式,下列表述中错误的是()A(<条件>部分可以是一个ifif(if(a=0)?)?B(ifif(?)if(?)?C(如果在<条件>前加上逻辑非运算符~1>2>的位置,语句功能不变D(<if(?)while(?)?量定义:下列情况中,不会调用拷贝构造函数的是()。A(用一个对象去初始化同一类的另一个新对象时B(将类的一个对象赋予该类的另一个对象时C(函数的形参是类的对象,调用函数进行形参和实参结合时D(函数的返回值是类的对象,函数执行返回调用时有如下类定义:classXX{intxx;public:XX():xx(0){cout<<?A?;}XX(intn):xx(n){cout<<?B?;}};classYY:publicXX{intyy;public:YY():yy(0){cout<<yy;}YY(intn):XX(n+1),yy(n){cout<<yy;}YY(intm,intn):XX(m),yy(n){cout<<yy;}A0A(YYy1(0,0);B(YYy2(1);C(YYy3(0);D(YYy4;下面对静态数据成员的描述中,正确的是()。A.B.员初始化C.静态数据成员只能用类名调用D.静态数据成员在定义对象时被分配空间对C++编译器区分重载函数无任何意义的信息是()A(参数类型B(参数个数C(返回值类型D(const是对构造函数和析构函数的正确定义。A(voidX::X(),voidX::~X()B(X::X(参数),X::~X()C(X::X(参数),X::~X(参数)D(voidX::X(参数),voidX::~X(参数)有如下程序段:inti=4;intj=1;intmain(){inti=8,j=i;cout<<i<<j<<endl;}运行时的输出结果是()A.44B.41C.88D.81C++中的类有两种用法:一种是类的实例化,即生成类对象,并参与系统的运行;另一种是通过()派生了新的类。A.复用B.继承C.封装D.引用下列对继承的描述中,错误的是()。析构函数不能被继承派生类也是基类的组合派生类的成员除了它自己的成员外,还包含了它的基类的成员D.中继承的基类成员的访问权限到派生类保持不变派生类的对象对它的基类成员中()是可以访问的。A.公有继承的公有成员B.公有继承的私有成员C.公有继承的保护成员D.私有继承的公有成员下列说法错误的是()。publicpublicprivateprivatepublicprivatepublicprotectedC++中,不能被派生类继承的有()。A.构造函数B.虚函数C.静态成员函数D.A.如果一个类中没有定义拷贝构造函数时,系统将自动生成一个默认的B.拷贝构造函数只有一个参数,并且是该类对象的引用C.拷贝构造函数是一种成员函数D.拷贝构造函数的名字不能用类名下列关于虚基类的描述中,错误的是()A(使用虚基类可以消除由多继承产生的二义性B(构造派生类对象时,虚基类的构造函数只被调用一次C(声明“classB:virtualpublicA”说明类B为虚基类D(有如下程序#include<iostream>usingnamespaceclassA{public:A(inti):r1(i){}voidprint(){cout<<?E?<<r1<<?-„;}voidprint()const{cout<<?C?<<r1*r1<<?-„;}private:intr1;};intmain(){Aal(2);constAa2(4);al.print();a2.print();Return0;}运行时的输出结果是()A(运行时出错B(E2-C16-C(C4-C1.D(E2-E4-下列对派生类的描述中,()是错误的。A(一个派生类可以作为另一个派生类的基类B(派生类至少有一个基类C(派生类的成员除了它自己的成员外,还包含了它的基类成员D(派生类中继承的基类成员的访问权限到派生类保持不变派生类的对象对它的哪一类基类成员是可以访问的,()A(公有继承的基类的公有成员B.公有继承的基类的保护成员C.公有继承的基类的私有成员D.保护继承的基类的公有成员关于多继承二义性的描述,()是错误的。A(派生类的多个基类中存在同名成员时,派生类对这个成员访问可能出现二义性B(一个派生类是从具有共同的间接基类的两个基类派生来的,派生类对该公共基类的访问可能出现二义性C(解决二义性最常用的方法是作用域运算符对成员进行限定D(派生类和它的基类中出现同名函数时,将可能出现二义性C++类体系中,能被派生类继承的是()。A(构造函数B(虚函数C(析构函数D(友元函数设有基类定义:classCbase{private:inta;protected:intb;public:intc;};派生类采用何种继承方式可以使成员变量b成为自己的私有成员()A.私有继承B.保护继承C.公有继承D.私有、保护、公有均可关于虚函数的描述中,()是正确的。虚函数是一个静态成员函数虚函数是一个非成员函数虚函数既可以在函数说明时定义,也可以在函数实现时定义D.派生类的述中,错误的是()。A(动态联编是以虚函数为基础B(动态联编是运行时确定所调用的函数代码的C(动态联编调用函数操作是指向对象的指针或对象引用D(动态联编是在编译时确定操作函数的下面4个选项中,()是用来声明虚函数的。A(virtualB(publicC(usingD(false关于纯虚函数和抽象类的描述中,错误的是()。A(纯虚函数是一种特殊的虚函数,它没有具体的实现B(抽象类是指具体纯虚函数的类C(一个基类中说明有纯虚函数,该基类派生类一定不再是抽象类D(抽象类只能作为基类来使用,其纯虚函数的实现由派生类给出编译时的多态性可以通过使用()获得。A(虚函数和指针B(重载函数和析构函数C(虚函数和对象D(虚函数和引用三、填写程序运行结果(每小题4分,共20分)以下程序的输出结果为#include<iostream>usingnamespacestd;voidmain(){intk=5;while(--k)cout<<”k=”<<k<<endl;}下面程序的运行结果为:#include<iostream>usingnamespacestd;voidmain(){inti,j,m=0,n=0;for(i=0;i<2;i++)for(j=0;j<2;j++)if(j>=i)m=1;n++;cout<<m<<endl;cout<<n;}执行这个程序段输出字符*的个数是#include<iostream>usingnamespacestd;intf(inta){intb=0;staticintb++;c++;return(a+b+c);}voidmain(){inta=2,I;for(I=0;I<3;I++)cout<<f(a)<<endl;}下面程序的运行结果为:#include<iostream>usingnamespacestd;classObj{staticinti;public:Obj(){i++;}~Obj(){i--;}staticintgetVal(){returni;}intObj::i=0;voidf(){Objob2;cout<<ob2.getVal();}intmain(){Objobl;f();Obj*ob3=newObj;cout<<ob3->getVal();deleteob3;cout<<Obj::getVal();return0;下面程序运行结束后,k的值为 。#include<iostream.h>voidmain(){inti,j,k;for(i=0,j=10;i<=j;i++,j--)k=i+j;count<<k;}下面程序的运行结果为:#include<iostream>usingnamespacestd;classC1{public:~C1(){cout<<1;}};classC2:publicC1{public:~C2(){cout<<2;}};intmain(){C2cb2;C1*cb1;return0;}下面程序的运行结果为:#include<iostream>usingnamespacestd;classA{public:virtualvoidfuncl(){cout<<voidfunc2(){cout<<“A2”;}};classB:publicA{public:voidfunc1(){cout<<“B1”;}voidfunc2(){cout<<“B2”;}};intmain(){A*p=newB;p->funcl();p->func2();return0;}以下程序的输出结果为#include<iostream>usingnamespacestd;intadd(intx,inty=8);voidmain(){inta=4;cout<<add(a)<<endl;cout<<add(a,add(a))<<endl;}intadd(intx,inty);{returnx+y;}#include<iostream>usingnamespacestd;voidmain(){intdo{++i;if(i%2!=0)y=y+i++;}while(i<=7);cout<<“x=”<<x<<”y=”<<y;}以下程序的输出结果为。intx1=30,x2=40;voidmain(){intx3=10,x4=20;intsub(intx,inty);sub(x3,x4);sub(x2,x1);cout<<x1<<x2<<x3<<x4;}sub(intx,inty){x1=x;x=y;y=x1;}以下程序的输出结果为#include<iostream>usingnamespacestd;classCsample{private:inti;staticintpublic:Csample();voidDisplay();};intCsample::k=0;Csample::Csample(){i=0;k++;}voidCsample::Display(){cout<<"i="<<i<<",k="<<k<<endl;}voidmain(){Csamplea,b;a.Display();b.Display();}以下程序的输出结果为。#include<iostream>usingnamespacestd;classPoint{intx,y;public:Point(intx1=0,inty1=8){x=x1;y=y1;}~Point(){cout<<"Point"<<x<<';'<<y<<"isdeleted."<<endl;}};voidmain(){Pointa;Pointb(10,10);}以下程序的输出结果为。#include<iostream>usingnamespacestd;classA{public:virtualvoidfuncl(){cout<<“A1”;}voidfunc2(){cout<<“A2”;}};classB:publicA{public:voidfunc1(){cout<<“B1”;}voidfunc2(){cout<<“B2”;}};intmain(){A*p=newB;p->funcl();p->func2();return0;}以下程序的输出结果为#include<iostream>#include<cstring>usingnamespacestd;classXCD{char*a;intb;public:XCD(char*aa,intbb){a=newchar[strlen(aa)+1];strcpy(a,aa);b=bb;}char*Geta(){returna;}intGetb(){returnb;}};intchar*p1=”abcd”,*p2=”weirong”;intd1=6,d2=8;XCDx(p1,d1),y(p2,d2);cout<<strlen(x.Geta())+y.Getb()<<endl;return0;}下面程序运行结果为:#include”iostream.h”f(inta){intb=0;staticintb++;c++;return(a+b+c);}voidmain(){inta=2,I;for(I=0;I<3;I++)cout<<f(a)<<endl;}#include<iostream>usingnamespaceclassA{public:A(){cout<<"A'scons."<<endl;}virtual~A(){cout<<"A'sdes."<<endl;}virtualvoidf(){cout<<"A'sf()."<<endl;}voidg(){f();}};classB:publicA{public:B(){f();cout<<"B'scons."<<endl;}~B(){cout<<"B'sdes."<<endl;}};classC:publicB{public:C(){cout<<"C'scons."<<endl;}~C(){cout<<"C'sdes."<<endl;}voidf(){cout<<"C'sf()."<<endl;}};voidmain(){A*a=newC;a->g();deletea;}下面程序运行结果为:#include<iostream.h>voidmain(){intdo{++i;if(i%2!=0)y=y+i++;}while(i<=7);cout<<“x=”<<x<<”y=”<<y;}程序运行结果为:nintfib(intn){if(n==0)return1;elseif(n==1)return2;elsereturnfib(n-1)+fib(n-2);}fib(2),fib下面程序运行结果为:#include<iostream>usingnamespacestd;classA{public:A(inti):r1(i){}voidprint(){cout<<?e?<<r1<<?-„;}voidprint()const{cout<<?C?<<r1*r1<<?-„;}private:intr1;};intmain(){Aal(2);constAa2(4);al.print();a2.print();return0;}下面程序运行结果为:#include<iostream>usingnamespacestd;classGrandChild{public:GrandChild(){strcpy(name,"Unknown");}constchar*getName()const{returnname;}virtualchar*getAddress()const=0;private:charname[20];};classGrandSon:publicGrandChild{public:GrandSon(char*name){}char*getAddress()const{return"Shanghai";}};intmain(){GrandChild*gs=newGrandSon("Feifei");cout<<gs->getName()<<"住在"<<gs->getAddress()<<endl;deletegs;return0;}以下程序的输出结果是。#include<iostream.h>main(){inty=9;for(;y>0;y--)if(y%3==0)cout<<--y;}以下程序的输出结果是。#include<iostream.h>main(){inta[5]={9,6,8,3,-1},i;sort(a);for(i=0;i<=4;i++)cout<<a[i];}sort(inta[]){inti,j,t,p;for(j=0;j<4;j++){p=j;for(i=j;i<=4;i++)if(a[i]<a[p])p=i;t=a[p];a[p]=a[j];a[j]=t;}}以下程序的输出结果是。#include<iostream.h>classPoint{intx,y;public:Point(intx1=0,inty1=8){x=x1;y=y1;}~Point(){cout<<"Point"<<x<<';'<<y<<"isdeleted."<<endl;}};voidmain(){Pointa;Pointb(10,10);}下面程序的运行结果是。#include<iostream.h>classBase{inti;public:Base(intn){cout<<"Constuctingbaseclass"<<endl;i=n;}~Base(){cout<<"Destructingbaseclass"<<endl;}voidshowi(){cout<<i<<",";}intGeti(){returni;}};classDerived:publicBase{intBasepublic:Derived(intn,intm,intp):Base(m),aa(p){cout<<"Constructingderivedclass"j=n;}~Derived(){cout<<"Destructingderivedclass"<<endl;}voidshow(){Base::showi();cout<<j<<","<<aa.Geti()<<endl;}};voidmain(){Derivedobj(8,13,24);obj.show();}#include<iostream>usingnamespacestd;classA{inta;public:A():a(9){}virtualvoidprint()const{cout<<a;};};classB:publicA{charb;public:B(){b=„S?;}voidprint()const{cout<<b;}};voidshow(A&X){X.print();}intmain(){Ad1,*p;Bd2;p=&d2;d1.print();d2.print();p->print();show(d1);show(d2);return0;}以下程序的输出结果是#include<iostream>usingnamespacestd;main(){inti,j,sum;for(i=3;i>=1;i--){sum=0;for(j=1;j<=i;j++)sum+=i*j;}cout<<sum;}#include"stdio.h"#defineN6main(){charc[N];inti;for(i=0;i<N;i++)c[i]=getchar();for(i=0;i<N;i++)putchar(c[i]);当运行程序时输入三行,每行都是在第一列上开始:a<Enter>b<Enter>cdef<Enter>如果不能使用多态机制,那么通过基类的指针虽然可以指向派生类对象,但是只能访问从基数继承的成员,下列程序没有使用多态机制,其输出结果是。#include<iostream>usingnamespacestd;classBase{public:voidprint(){cout<<'B';}};classDerived:publicBase{public:voidprint(){cout<<'D';}};intmain(){Derived*pd=newDerived();Base*pb=pd;pb->print();pd->print();deletepd;return0;以下程序的输出结果是#include<iostream.h>classCsample{private:inti;staticintpublic:Csample();voidDisplay();};intCsample::k=0;Csample::Csample(){i=0;k++;}voidCsample::Display(){cout<<"i="<<i<<",k="<<k<<endl;}voidmain(){Csamplea,b;a.Display();b.Display();}以下程序的输出结果是#include<iostream.h>classA{public:A(char*s){cout<<s<<endl;}~A(){}};classB:virtualpublicA{public:B(char*s1,char*s2):A(s1){cout<<s2<<endl;}};classC:virtualpublicA{public:C(char*s1,char*s2):A(s1){cout<<s2<<endl;}};classD:publicB,publicC{public:D(char*s1,char*s2,char*s3,char*s4):B(s1,s2),C(s1,s3),A(s1){cout<<s4<<endl;}};voidmain(){D*p=newD("classA","classB","classC","classdeletep;}下面程序的运行结果为:#include<iostream.h>voidmain(){inti,k=0;for(i=0;;i++){k++;if(k%3==0)break;}cout<<i<<k;}下面程序的运行结果为:#include<iostream.h>classPoint{intx,y;public:Point(intx1=0,inty1=8){x=x1;y=y1;}~Point(){cout<<"Point"<<x<<';'<<y<<"isdeleted."<<endl;}};voidmain(){Pointa;Pointb(10,10);}下面程序的运行结果为:#include<iostream>usingnamespaceclassSp{intpublic:voidsetx(inti){x=i;}intputx(){returnx;}};voidmain(){Spa[3],*p;for(inta[i].setx(i);p=a;for(;i>0;i--)cout<<p++->putx()<<"";cout<<endl;}#include<iostream>usingnamespacestd;classMyClass{public:MyClass(){cout<<?A?;}MyClass(charc){cout<<c;}~MyClass(){cout<<?B?;}};intmain(){MyClassp1,*p2;p2=newMyClass(„X?);deletep2;return0;}下面程序的运行结果为:#include<iostream>#include<cstring>usingnamespaceclassXCD{char*a;intb;public:XCD(char*aa,intbb){a=newchar[strlen(aa)+1];strcpy(a,aa);b=bb;}char*Geta(){returna;}intGetb(){returnb;}};intmain(){char*p1=”abcd”,*p2=”weirong”;intd1=6,d2=8;XCDx(p1,d1),y(p2,d2);cout<<strlen(x.Geta())+y.Getb()<<endl;return0;}以下程序的输出结果为。charch1='b',ch2;ch2=ch1+'A'-'a';cout<<ch1<<?,?<<ch2;以下程序的输出结果为。#include"iostream.h"voidmain(){intn[2]={0},i,j;for(i=0;i<2;i++)for(j=0;j<2;j++)n[j]=n[i]+1;for(i=0;i<2;i++)cout<<n[i];}以下程序的输出结果为。#include<iostream.h>voidmain(){inti,k=0;for(i=0;;i++){k++;if(k%3==0)break;}cout<<i<<k;}下面程序的运行结果是 #include"iostream.h"classtest{private:intnum;floatpublic:test();intgetint(){returnnum;}floatgetfloat(){returnfl;}~test();};test::test(){cout<<"Initalizingdefault"<<num=0;fl=0.0;}test::~test(){cout<<"Destructorisactive"<<endl;}voidmain(){testarray[2];cout<<array[1].getint()<<""<<array[1].getfloat()<<endl;}下面程序的运行结果是 #include<iostream>usingnamespacestd;classA{inta;public:A():a(9){}virtualvoidprint()const{cout<<a;};};classB:publiccharb;public:B(){b=„S?;}voidprint()const{cout<<b;}};voidshow(A&X){X.print();}intmain(){ABd2;p=&d2;d1.print();d2.print();p->print();show(d1);show(d2);return0;}下列程序运行结果为:#include<iostream.h>voidmain(){inti,j,m=0,n=0;for(i=0;i<2;i++)for(j=0;j<2;j++)if(j>=i)m=1;n++;cout<<m<<endl;cout<<n;}写出下列程序运行结果:#include<iostream.h>voidmain(){inta,b;for(a=1,b=1;a<=100;a++){if(b>=10)break;if(b%3==1){b+=3;continue;}}cout<<a<<endl;cout<<b;}下面程序段的运行结果为:for(y=1;y<10;)y=((x=3*y,x+1),x-1);cout<<“x=”<<x<<”y=”<<y;A(x=27,y=27B(x=12,y=13C(x=15,y=14D(x=y=27下面程序段的运行结果是为:i=1;a=0;s=1;do{a=a+s*i;s=-s;i++;}while(I<=10);cout<<“a=”<<a;下面程序段的运行结果为:#include<iostream.h>voidmain(){inti,t,sum=0;for(t=i=1;i<=10;){sum+=t;++i;if(i%3==0)t=-i;elset=i;}cout<<“sum=”<<sum;}下面程序的输出结果为:#include”iostream.h”f(inta){intb=0;staticintb++;c++;return(a+b+c);}voidmain(){inta=2,I;for(I=0;I<3;I++)cout<<f(a)<<endl;}下面程序的输出结果为:#include<iostream.h>classPoint{intx,y;public:Point(){x=1;y=1;}~Point(){cout<<"Point"<<x<<','<<y<<"isdeleted."<<endl;}};voidmain(){Pointa;}下面程序的输出结果为:#include<iostream.h>#include<conio.h>intcount=0;classPoint{intpublic:Point(){count++;}~Point(){count--;}friendvoiddisplay();voiddisplay(){cout<<"Thereare"<<count<<"points,"<<endl;}voidmain(){Pointa;display();{Pointb[5];display();}display();}下面程序的运行结果为:#include<iostream.h>classbase{public:voidshow(){cout<<"classbaseshow()iscalled.\n";}};classderived:publicbase{public:voidshow(){cout<<"classderivedshow()iscalled.\n";}};voidmain(){basedemo1;deriveddemo2;demo1.show();demo2.show();demo2.base::show();}下面程序的运行结果为:#include<iostream.h>classA{public:A(){cout<<"A'scons."<<endl;}virtual~A(){cout<<"A'sdes."<<endl;}virtualvoidf(){cout<<"A'sf()."<<endl;}voidg(){f();}};classB:publicA{public:B(){f();cout<<"B'scons."<<endl;}~B(){cout<<"B'sdes."<<endl;}};classC:publicB{public:C(){cout<<"C'scons."<<endl;}~C(){cout<<"C'sdes."<<endl;}voidf(){cout<<"C'sf()."<<endl;}};voidmain(){A*a=newC;a->g();deletea;}四、程序设计题(每小题10分,共40分)以则输出它的面积和三角形类型(等边、等腰、直角三角形)。3displaymain函数使用这个类,实现对学生数据的赋值和输出。从键盘输入若干个学生成绩,统计并输出最高成绩和最低成绩,当输入负4.体积。编写一个程序,输入年、月,打印出该年份该月的天数。C=(F-32)*5/9;7.Tree(ages(grow(intyears)agesyears,showage()treeagesTree数(学生自行指定实参数据)。8.定义一个复数类,用友元函数实现对双目运算符“+”的运算符重载,使其适用于复数运算。9.有一个函数如下:x(x<5)y=x+6(5<=x<15)x-6(x>=15)输入x的值,计算出相应的y值。点数的两数之和,并在主函数中调用。shape形面积的派生类。程序中通过基类指针来调用派生类中的虚函数,计算不同形状的面积。Counter记数;可提供记数值。12,则输出12=1*2*2*314.数之和和浮点数的两数之和,并在主函数中调用。xyr(半径),圆类成员函数包括构造函数、求面积的函数和输出显示圆心坐标及圆半径的函数。NN+1序。点数的两数之和,并在主函数中调用。rectanglelenwid,retange(int,int)intarea(rectangleT)intfun(rectangleT)积。定义一个复数类,用友元函数实现对双目运算符+和*的运算符重载,使其20.1080并输出平均值。String1,charhead[100],String(char*Head)headvoidReverse()headPrint(head输出。11111,,,,21111,,,,32111A=,,43211,,,,54321,,Box可计算盒子的表面积。24.MammalDogSpeak()成员函数,基类中定义为虚函数。声明一个Dog类的对象,调用Speak()函数,观察运行结果。师类增加工号、职称和工资,学生类增加学号、班级、专业和入学成绩。Cou

温馨提示

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

评论

0/150

提交评论