1一、程序分析题(每小题5分,共10分,请将程序运行结果填入到对应的文本框内。重要提示:1、务必在第Ⅰ卷时间内完成程序分析题,之后无法再修改;2、程序分析题完成后,不要急于提交试卷,否则后果自负。)运行一下就有执行结果,自己动手吧啊,嘿嘿!!!!!!!!!!!!!!1.#includeiostream#includestringusingnamespacestd;classPerson{public:Person(conststring&stuName):szName(stuName){perCount++;cout构造:szName,perCountendl;}Person(constPerson&stu):szName(stu.szName){perCount++;cout拷贝构造:szName,perCountendl;}~Person(){cout析构:szName,perCountendl;perCount--;}conststring&GetName()const{returnszName;}private:stringszName;staticunsignedintperCount;};unsignedintPerson::perCount=0;intmain(intargc,char**argv){Person*p1=newPerson(Liu);Personp2(Li);Person*p3=newPerson(p2);deletep1;2deletep3;}2./*STL中链表类list的部分成员函数注释如下:Thesort()functionisusedtosortlistsintoascendingorder.Orderingisdoneviatheoperator,unlesspisspecified,inwhichcaseitisusedtodetermineifanelementislessthananother.Thefunctionmerge()mergesthelistwithlst,producingacombinedlistthatisorderedwithrespecttotheoperator.Ifcompfunctionisspecified,thenitisusedasthecomparisonfunctionforthelistsinsteadof.Thefunctionunique()removesallconsecutiveduplicateelementsfromthelist.Notethatonlyconsecutiveduplicatesareremoved,whichmayrequirethatyousort()thelistfirst.Equalityistestedusingthe==operator,unlessprisspecifiedasareplacement.Theorderingoftheelementsinalistshouldnotchangeafteracalltounique().*/#includeiostream#includestring#includelistusingnamespacestd;structStuNode{stringname;intID;StuNode(string_name=,int_ID=0):name(_name),ID(_ID){}friendbooloperator==(constStuNode&l,constStuNode&r){return(l.ID==r.ID);}friendbooloperator(constStuNode&l,constStuNode&r){return(l.IDr.ID);}3};voidRead(StuNodestu[],intsize,listStuNode&buff){for(inti=0;isize;i++)buff.push_back(stu[i]);}voidPrint(constlistStuNode&buff){listStuNode::const_iteratorit;for(it=buff.begin();it!=buff.end();it++)coutit-ID\tit-nameendl;}intmain(){StuNodes1[5]={StuNode(David,10002),StuNode(James,10002),StuNode(John,10003),StuNode(Smith,10008),StuNode(Jones,10002)};StuNodes2[3]={StuNode(Michael,10006),StuNode(Jane,10007),StuNode(Jane,10007)};listStuNodefirst,second;Read(s1,5,first);Read(s2,3,second);first.sort();second.sort();first.merge(second);first.unique();Print(first);return0;}4二、填空题(每小题1分,共10分。)1.C++通过函数模板和类模板来支持泛型程序设计。2.定义重载函数时,应至少使重载函数参数的类型或参数个数不同。3.封装是面向对象程序设计的基本特性,把数据和操作合成一个整体。4.可以在具有类型转换功能的构造函数的声明前面加上关键字explicit(p145页),禁止隐式类型转换。5.类中成员的访问权限可以分为公有、保护和私有。6.如果类的定义中没有显式初始化对象成员,则系统将调用该对象的默认构造函数以实现初始化。7.如果一个派生类只有唯一的基类,这种继承关系称单继承。(有多个基类是多继承)8.用new动态创建对象,用delete删除该对象。9.在C++类中,有一种不能定义对象的类,这样的类只能被继承,称为抽象类。10.在STL中,迭代器如同一个特殊的指针(用以指向容器中某个位置的数据元素)。三、单项选择题(每小题2分,共30分。)1.基于面向对象程序设计的软件系统应该具有(A)。A、高内聚、低耦合的特征B、低内聚、低耦合的特征C、高内聚、高耦合的特征D、低内聚、高耦合的特征2.假定AB为一个类,则该类的拷贝构造函数的声明语句为(D)。(145页,形式在146页)A、AB(ABx)B、AB(AB*x)C、AB&(ABx)D、AB(AB&)3.假定Matrix是名称空间osg的一个类,则下列语句错误的是(D)。107页A、usingosg::Matrix;Matrixm;B、usingnamespaceosg::Matrix;Matrixm;5C、usingnamespaceosg;Matrixm;D、osg::Matrixm;4.静态成员函数没有(B)。168页,建议165到168都弄懂,还有const的相关内容A、返回值B、this指针C、指针参数D、返回类型5.类模板的实例化(C)。A、属于动态联编B、在连接时进行C、在编译时进行D、在运行时进行6.能用友元函数重载的运算符是(C)。182页和206页有重载运算符的限制和建议的重载方式,非成员即为有缘方式A、-B、=C、+D、[]7.派生类的对象对它的基类成员中(C)是可以访问的。216-220页在派生类中的可见性和132页publicprivate,protected的访问限定结合起来分析弄懂!!!A、公有继承的私有成员B、私有继承的公有成员C、公有继承的公有成员D、公有继承的保护成员8.如果要禁止对象之间的赋值运算,应该把operator=声明为(A)成员。199页A、private6B、friendC、publicD、protected9.若要打开一个用于输入的文本文件file.txt,下列操作错误的是(D)。A、ifstreaminFile;inFile.open(file.txt);B、fstreaminFile(file.txt,ios::binary);/*ios::binary是以二进制的形式打开的*,不太确定,可以问一下别人/C、ifstreaminFile(file.txt);D、fstreaminFile(file.txt,ios::in);10.通过(A)可以在现有类的基础上派生出新的类。A、继承B、引用C、包含D、封装11.下列关于构造函数和析构函数的描述正确的是()。A、构造函数和析构函数都可以重载/*错误,构造函数可以,析构函数不可以*。150页*/B、析构函数可以定义为虚函数/*正确*/254页C、构造函数和析构函数都没有返回值/*正确*/D、构造函数和析构函数都不能被继承/*正确*/12.下列关于引用的用法中,正确的是(C)。40页A、intx=100;int&refx=&x;B、intx=100,&refx;refx=x;C、intx=100;int&refx=x;D、int&refx=100;若为constint&refx=100为正确,57页13.已知类A是类B的友元,类B是类C的友元,则(A)。7A、类A的成员函数可以访问类B的对象的任何成员B、类C一定是类A的友元C、类A一定是类C的友元D、类C的成员函数可以访问类B的对象的任何成员14.以下基类中的成员函数,哪个表示纯虚函数(D)。262页A、voidvf(int)=0B、virtualvoidyf(int){}C、virtualvoidvf(int)D、virtualvoidvf()=015.以下类模板templateclassT1,classT2=int,intnum=10classMyClass{…};正确的实例化方式是(C)。A、MyClasschar*,,100C1;B、MyClasschar,100,intC1;T1需要给定参数,T2有默认值,可以修改也可以不改为空,num也是,但值必须是int型的,A不对是不能第二个为空后再给第三个参数,默认参数值是最后的几个,连续的为空94-95页C、MyClasschar,charC1;D、MyClassC1;四、判断题(每小题2分,共20分。)1.C++函数可以返回局部对象的指针或引用。(对错)错2.const数据成员的值对类中所有对象都是一样的。(对错)对3.定义带默认形参的函数时,默认形参值可以同时出现在函数声明和函数定义中。(对错)错,只能出现在定义中g94-954.多重继承中出现的二义性可以用作用域分辨法消除。(对错)对5.赋值运算符只能作为成员函数重载。(对错)对6.即使定义了带参构造函数,系统也会提供无参构造函数。(对错)错87.如果定义listint::iteratorit,若需按偶数进行跳跃式访问,可采用迭代器操作it+=2。(对错)错,容器那一张看迭代器的用法8.虚函数使用静态绑定的函数调用机制。(对错)错,动态,运行时刻才知道的9.用new和malloc为对象动态分配内存时,都会自动调用对象的构造函数。(对错)10.在堆上创建的多个对象的析构顺序与构造顺序相反。(对错)对五、程序设计题(每小题10分,共30分,请将设计的程序代码填入到对应的文本框内。)1.定义一个表示形状的基类Shape类和它的派生类圆形类(Circle)、正方形类(Square),具体要求如下:a)基类Shape中有虚函数area()和perimeter(),实现求形状的面积和周长,可用cout输出表示。b)在main函数中,每个派生类生成两个对象,共四个对象存放于一个数组中,用循环程序访问其求面积和周长的成员函数。输入输出样例参考:Square26.5220.60Square4.418.40Circle33.8020.61Circle12.6912.632.建立分数类Fraction,其