C面向对象程序设计期末考试试题_第1页
C面向对象程序设计期末考试试题_第2页
C面向对象程序设计期末考试试题_第3页
C面向对象程序设计期末考试试题_第4页
C面向对象程序设计期末考试试题_第5页
免费预览已结束,剩余1页可下载查看

下载本文档

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

文档简介

C面向对象程序设计期末考试一试题C面向对象程序设计期末考试一试题6/6C面向对象程序设计期末考试一试题?C++面向对象程序设计?考试一试题本试卷总分值100分;请将答案写在答题纸上,写明题号,不用抄题,笔迹工整、清楚;请在答题纸和试题纸上都写上你的班级,学号和姓名,交卷时请将试题纸、答题纸和厕纸一并交上来。一、单项选择题(共10分,每题1分)C++中解决命名矛盾的体制是:D(A)虚基类(B)虚函数(C)函数重载(D)名字空间2.假定类A的一个对象所占的内存空间中包括虚函数表的进口地点,那么:C(A)类A不可以有静态数据成员(B)类A中公有的成员函数必定是虚的(C)类A中起码有一个成员函数是虚的(D)类A的析构函数必定是虚的3.随意一个类,析构函数的个数最多是:B(A)不限个数(B)1(C)2(D)34.以下对于this指针的说法,哪个是正确的:D(A)this指针必定指向常量型数据(B)this指向的数据不行改正(C)静态成员函数中也能够接见this指针(D)this指针自己可直接作为成员函数的返回值5.在类定义中,为说明成员的接见权限,private,protected,public能够出现次数为:A(A)次数没有详细限制(B)每种至多一次(C)public起码一次(D)每种起码一次6.下边哪一种定义方式是正确的,而且使得p能够作为函数voidf(A*constpp);的实参:A(A)A*p=newA;(B)Aa;A*p=a;(C)constA*p=newA;(D)Aa;constA*p=a;7.obj是类A的一个对象,履行语句constA&aA=obj;,那么以下说法正确的选项是:C(A)类A的拷贝结构函数会被调用(B)类A的赋值函数会被调用(C)&aA的值就是&obj(D)语句obj.f();等价于语句aA.f();8.下边对于接见类A的私有数据成员的说法,错误的选项是:C(A)类A的友元函数能够接见类A的私有成员。(B)类A的友元类中的非静态成员函数能够接见类A的私有成员。(C)类A的嵌套类中的非静态成员函数能够接见类A的私有成员。(D)类A中的非静态成员函数能够接见类A的私有成员。9.类A中有独一的一个成员函数f,且f是公有的静态或非静态成员函数,对于类A的一个对象a,履行语句a.f(100);成功,那么f的函数原型不可以够是:B(A)A&f(int,int=50);(B)voidf(int&);(C)constA*f(constint);(D)Af(constint&);10.下边对于类的成员函数描绘不正确的选项是:A静态成员函数内能够直接接见类的非静态成员数据静态成员函数内能够直接接见类的静态成员数据非静成函数能够直接的非静成数据非静成函数能够直接的静成数据〔全局成〕二、判断正,于你的述,明原由或出反例。〔每2分,共20分〕1.重流操作符<<和>>,假如第一个参数的型ostream和istream,那么个重函数既能够用于准入出流,也能够用于文件流上。,ostream和istream是准入出流、文件流、字符串流的基2.在同一其中,能够定重的成函数voidf(int);和virtualvoidf(int);。,属于重复定抽象不会生例,所以不需要有结构函数。,被派生需要它的结构函数A有一个非静的成函数f,其函数原型是:voidA::f()const,函数被用,必定是通A或A的某后代的一个用const修符明的常量象用的。,常函数能够由量象或常量象用异样必在其生的目前函数中捕,而不可以在外函数中捕异样。,能够在外捕,而且是最常的用法6.只需程序中没有Aa1=a2;和Aa1(a2);形式的代,A的拷结构函数就不会被用。,参数或函数返回也用拷结构函数在protected承方式下,派生象的指不可以直接成指向基象的指。,否基中的公有成由不行可,限被放大8.假定静成函数顶用了一个函数f,那么f必定不是虚函数。,静成函数不可以是虚函数,因虚函数进口需要在保留在象中的虚函数表中,而静成函数不属于象。假定要例化一个含有引用型数据成的,那么只好使用结构函数初始化列表来初始化数据成。,没有的法结构函数的函数体中,不可以使用return句;但在的自型化函数,必有return句。三、回复以下各〔每4分,共20分〕1.例明static关字的用法和相目的(起码3种)。f(){staticinta;⋯}函数体内的静量,每次用函数保持不staticinta;全局的静量,束作用域所在文件classA{staticinta;⋯};A的静成,似全局量,需用A::a2.例明的数据成在哪些状况下必在初始化列表中行初始化(起码3种)。基不供给无参的结构函数成象不供给无参的结构函数有常量成或引用成例明虚承的作用和目的。-2-虚构继承的目的是使基类在派生类中只保留一个副本进而防备二义性举例说明成员函数A&f()const;和成员函数A&f();的差别。A&f()const是常函数,隐含的this指针是常指针,所以在f中不可以改正对象成员的值。举例略有类A的对象a,随意给出一种解决方案,使得程序支持下边的表达式:a=10+a;classA{A(int);//变换结构函数friendconstAoperator+(constA,constA);//重载+};四、指出以下程序代码中存在的错误或缺少,说明原由。〔每题5分,共10分〕1.#include<iostream.h>classB:publicAvoidmain()classA{{{public:public:A*p=newB;virtual~A(){}virtualvoidg()p->f();virtualvoidf(){cout<<"B::g()"<<endl;}p->g();{cout<<"A::f()"<<endl;}virtualvoidk()p->k();virtualvoidg(){cout<<"B::k()"<<endl;}deletep;{cout<<"A::g()"<<endl;}};}};答:函数k在A中没有定义,履行p->k();时要依据p的种类在A中查k的信息2.#include<iostream.h>classA{#include<string.h>public:classA;~A(){}classB:publicA{virtualvoidoutput(){}public:};B(constchar*info){voidmain()m_buf=newchar[256];{strcpy(m_buf,info);}A*pa=newB("hello!");~B(){delete[]m_buf;}pa->output();virtualvoidoutput(){cout<<m_buf;}deletepa;private:}char*m_buf;};答:A的析构函数应定义为虚函数,否那么B的析构函数不会被调用,m_buf也不会被开释-3-五、写出下边程序的运转结果〔每题5分,共10分〕1.#include<iostream.h>classB:publicA{voidmain()classA{public:{public:~B(){--count;Out();}{A():count(1){}virtualA*Copy()const{Bb;virtual~A(){}B*p=newB(*this);A*a1=&b;virtualA*Copy()const=0;++p->count;a1->Out();virtualvoidOut()const=0;returnp;a1=a1->Copy();protected:}a1->Out();intcount;virtualvoidOut()constdeletea1;};{cout<<count<<endl;}}};}答:12102.#include<iostream.h>classB:publicA{classA{public:public:B(A&a):obj(a),A(1){}A(intn):num(n){Out();}voidOut(){obj.Out();}A(constA&rhs):num(rhs.num){Out();}private:voidOut(){cout<<num<<endl;}Aobj;public:};intnum;voidmain(){};Aa(8);Bb1(a);Bb2(b1);b2.Out();}答:818188-4六、阅读下边两个类的定义和局部实现代码,达成3个问题。〔共10分〕#include<iostream.h>classB{intmain()classA{public:{public:B(intn);Bb1(1);A(intn):value(n){}voidDisplay()constb1.Display();voidDisplay()const{aA.Display();}Bb2(2);{cout<<"Value="<<value<<endl;}private:b2.Display();private:AaA;return0;intvalue;};}};[3分]实现类B的结构函数,使得程序的输出为:Value=1Value=2答:B(intn):aA(n)2.[3分]假定main函数中增添了语句Bb3(b1);针对本例,说明能否有必需以公有方式自定义并实现类B的拷贝结构函数,为何?答:不需要,因为类B及基类A中不存在引用或指针成员,使用默认的拷贝结构函数就能够。3.[4分]在不变动类A和main函数的前提下,以继承的方式从头定义并实现类B,使得程序的输出结果不变。答:classB:publicA{public:B(intn):A(n);voidDisplay()const{A::Display();}};七、(共20分,每问题10分)某程序员为了灵巧地对各样的给定的曲线函数f(x)画出其曲线图形,设计并局部实现了一个曲线类curve,该类的成员数据中,count代表坐标点的个数,pxs代表的数组寄存这些坐标点的横坐标,pys代表的数组寄存利用f(x)计算获得的这些坐标点的纵坐标。因为不一样曲线的计算公式f(x)是不一样的,该程序员希望曲线函数的种类能够经过继承curve类的方式随意增添,增添一个新的f(x)时不改变curve类中的内容,也不改变利用curve类进行图形绘制的算法。已局部达成的curve类定义和实现以下:classcurve{public:voidsetPxs(){/*把获得的横坐标数据寄存在pxs代表的数组中,并为count置值*/}double*getPxs()const{returnpxs;}intgetCount()const{returncount;}-5-double*getPys()const;private:double*pxs;double*pys;intcount};1、请依据该程序员的设计企图给出成员函数getPys的完好实现。实现过程中,能够为curve类增添其余成员。能够假定setPxs函数已经完好实现,不需要考虑曲线的绘制和显示。答:classcurve{public:voidsetPxs(){/*把获得的横坐标数据寄存在pxs代表的数组中,并为count置值*/}double*getPxs()const{returnpxs;}intgetCount()const{returncount;}double*getPys()const;virtualdoublef(double)=0;private:double*pxs;double*pys;intcount};double*curve::getPys()const{if(pys==NULL)pys=newdouble[count];for(inti=0

温馨提示

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

评论

0/150

提交评论