C++练习题及答案.docx_第1页
C++练习题及答案.docx_第2页
C++练习题及答案.docx_第3页
C++练习题及答案.docx_第4页
C++练习题及答案.docx_第5页
免费预览已结束,剩余11页可下载查看

下载本文档

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

文档简介

一、单选题1下列描述中,表达错误的是( )。 A、公有继承的基类中的Public成员在派生类中仍是Public的 B、私有继承的基类中Private成员在派生类中仍是Private的 C、公有继承的基类中的Protected成员在派生类中仍是Protected的 D、私有继承的基类中Public成员在派生类中是Private的2. 下面( )项是对构造函数和析构函数的正确定义。A、void X:X(), void X:X() B、X:X(参数), X:X()C、X:X(参数), X:X(参数) D、void X:X(参数), void X:X(参数)3. 如果类A被说明成类B的友元,则( )。A、类A的成员即类B的成员 B、类B的成员即类A的成员C、类A的成员函数不得访问类B的成员类D、B不一定是类A的友元4. 拷贝(复制)构造函数的作用是( )。A、进行数据类型的转换 B、用对象调用成员函数C、用对象初始化对象 D、用一般类型的数据初始化对象5. 下面对静态数据成员的描述中,正确的是( ) 。A、静态数据成员可以在类体内进行初始化 B、静态数据成员不可以被类的对象调用C、静态数据成员不能受private控制符的作用 D、静态数据成员可以直接用类名调用6 C+中的类有两种用法:一种是类的实例化,即生成类对象,并参与系统的运行;另一种是通过( )派生了新的类。 A、复用 B、继承 C、封装 D、引用7. 下列对继承的描述中,错误的是( )。A、析构函数不能被继承B、派生类也是基类的组合C、派生类的成员除了它自己的成员外,还包含了它的基类的成员D、派生类中继承的基类成员的访问权限到派生类保持不变8. 下列虚基类的声明中,正确的是( )。A、class virtual B:public A B、virtual class B:public AC、class B:public A virtual D、class B: virtual public A9. 关于多继承二义性的描述,( )是错误的。A、派生类的多个基类中存在同名成员时,派生类对这个成员访问可能出现二义性B、一个派生类是从具有共同的间接基类的两个基类派生来的,派生类对该公共基类的访问可能出现二义性C、解决二义性最常用的方法是作用域运算符对成员进行限定D、 派生类和它的基类中出现同名函数时,将可能出现二义性10. 下列关于虚基类的描述,错误的是( )A、设置虚基类的目的是为了消除二义性B、虚基类的构造函数在非虚基类之后调用C、若同一层中包含多个虚基类,这些虚基类的构造函数按它们说明的次序调用D、若虚基类由非虚基类派生而来,则仍然先调用基类构造函数,再调用派生类的构造函数11. 在C+语言中,对函数参数默认值描述正确的是( )。A、函数参数的默认值只能设定一个B、一个函数的参数若有多个,则参数默认值的设定可以不连续C、函数必须设定默认值D、在设定参数的默认值后,该参数后面定义的所有参数都必须设定默认值12. 下列关于派生类构造函数的描述中,错误的是 ( )A、派生类构造函数应包含直接基类和所有间接基类的构造函数B、派生类构造函数仅包含直接基类构造函数和其他(如子对象)类构造函数等C、派生类构造函数通常带有成员初始化表D、派生类默认构造函数中隐含包括直接基类的默认构造函数13. 对于运算符重载,说法正确的是( ) A、运算符如果被重载为非成员函数,那么对象就不能利用这个运算符重载函数进行操作B、运算符重载函数可能既不是成员函数,也不是友元函数C、用户每定义一个类,系统会自动提供一个赋值运算符重载函数,所以完全不必考虑重载赋值运算符函数D、一个类的虚函数不能调用运算符重载函数14. 下列关于this指针的说法正确的是( )A、this指针存在于每个函数之中B、在类的非静态函数中this指针指向调用该函数的对象C、this指针是指向虚函数表的指针D、this指针是指向类的函数成员的指针15. 要让一个类中的所有对象具有共同的数据,请使用( )。A、常数成员变量 B、私有数据成员 C、静态数据成员 D、以上都是得分二、填空题1. 在保护继承关系下,基类的公有成员和保护成员将成为派生类中的 成员,它们只能由派生类的 来访问;基类的私有成员将成为派生类中的 成员。2. 运算符对指定类型对象动态分配内存并返回该类型的 。3. 如果需要在被调函数运行期间,改变主调函数中实参变量的值,则函数的形参应该是 或 。4. 在面向对象的程序设计中,通过 实现数据隐藏;通过继承实现代码的复用。 函数名重载是指同一作用域内的多个函数使用相同的函数名,这些同名函数通过它们的 进行区分。5. 单目运算符作为类成员函数重载时没有参数;双目运算符作为 重载时只需声明其右操作数,作为友元函数重载时需声明全部操作数。6. 在C+语言中,访问一个对象的成员所用的运算符是_,访问一个指针所指向的对象的成员所用的运算符是_。7. 在继承机制下,当对象消亡时,编译系统先执行 的析构函数,然后才执行 的析构函数,最后执行 的析构函数。三、改错题(找出以下程序中的错误,说明错误原因并改正)1. #includeclass one int a1,a2; public:one(int x1=0, x2=0);void main()one data(2,3); coutdata.a1endl; coutdata.a2endl;2. #include class Amplifier float invol,outvol;public: Amplifier(float vin,float vout) invol=vin; outvol=vout; float gain(); Amplifier:float gain() return outvol/invol; void main() Amplifier amp(5.0,10.0); coutgain()endl;3. 代码段:class window protected: int basedata;class border: public window ;class menu: public window ;class border_and_menu: public border, public menupublic: int show() return basedata; 四、程序阅读题(仔细阅读程序,写出程序运行结果)1. #include class point int x,y;public:point(int a,int b) x=a;y=b; coutcalling the constructor function.endl; point(point& p); friend point move(point q); point()coutcalling the destructor function.n; int getx() return x; int gety() return y; ;point:point(point &p)x=p.x; y=p.y; coutcalling the copy_initialization constructor function.n;point move(point q)coutOK!n; int i,j; i=q.x+10; j=q.y+20; point r(i,j); return r;void main() point m(15,40),p(0,0); point n(m); p=move(n); coutp=p.getx(),p.gety()endl;2. #include using namespace std;class Afriend double count(A&);public:A(double t, double r):total(t),rate(r)private:double total;double rate;double count(A& a)a.total+=a.rate*a.total;return a.total;int main(void)A x(80,0.5),y(100,0.2);coutcount(x),count(y)n;coutcount(x)n;return 0;3. #includeclass A public: A(char *s) coutsendl; A() ;class B:virtual public A public: B(char *s1, char *s2):A(s1) couts2endl; ;class C: virtual public A public: C(char*s1,char *s2):A(s1) couts2endl; ;class D:public B,public Cpublic: D(char *s1, char *s2,char *s3, char *s4):B(s1,s2),C(s1,s3),A(s1) couts4”)7. 派生类派生类中子对象类基类三、改错题1. 分析:出错原因:构造函数参数表语法错;构造函数没有函数体;类的对象不能直接访问类的私有成员变量。2. 分析:成员函数在类体外定义格式是:函数返回类型 类名:成员函数名(参数表);成员函数调用格式是:对象名.成员函数名(参数表)。改正后的程序如下:#include class Amplifier float invol,outvol;public: Amplifier(float vin,float vout) invol=vin;outvol=vout; float gain(); float Amplifier:gain() return outvol/invol; void main() Amplifier amp(5.0,10.0); coutamp.gain()endl;3. return basedata;/ 在border_and_menu中引用basedata时产生二义性,应使用虚基类应改为:class border:virtual public window ;class menu: virtual public window ;四、程序阅读题1. 分析:根据构造函数、拷贝构造函数和友元函数的特点,执行该程序后,输出结果是:calling the constructor function.calling the constructor function.calling the copy_initialization constructor function.calling the copy_initialization constructor function.OK!calling the constructor function.calling the copy_initialization constructor function.calling the destructor function.calling the destructor function.calling the destructor function.P=25,60calling the destructor function.calling the destructor function.calling the destructor function.2.结果: 120,120 1803. 说明:创建D对象时,只有在D的构造函数的初始化列表中列出的虚基类构造函数被调用,D的两个基类B、C的构造函数中的虚基类构造函数被忽略,不执行,从而保证在D对象中只有一个虚基类子对象。运行结果:class Aclass Bclass Cclass D五、程序设计题#includeusing namespace std;class Point /定义基类 public: Point(int myx,int myy)x=myx;y=myy; void displayxy()coutThe postion of center:;cout(x,y)endl;protected: int x,y;/不能定义为私有成员,最好定义为保护成员;class Circle:public Point /定义派生类,公有继承方式 public: Circle(int myx,int myy,int myr):Point(myx,myy)r=myr; void displayr()coutThe radius of circle:rendl; private: int r;class Cylinder:public Circle /定义派生类,公有继承方式 publ

温馨提示

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

评论

0/150

提交评论