下载本文档
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、10 分,每题1 分)单项选择1. 对于全局函数int f(void) ,与其完全等价的函数原型为:cA. int& f( ); B. int f(void ) const; C. const int f( ); D. A、 B、 C都不是2. 类 A中有唯一的非静态成员函数int f(A& one)和私有的数据成员int x;,那么在此成员函数的函数体中可以有语句:dA. return (this); B. x=f(this); C. this->f; D. int* const pX=&3. 下面关于new 和 delete 操作符的说法,哪个是不正确的:dA
2、. 使用 new 操作符,可以动态分配全局堆中的内存资源。B. 若 p 的类型已由A*强制转换为void *, 那么执行语句delete p; 时, 类 A的析构函数不会被调用。C. 实现全局函数时,new 和 delete 通常成对地出现在由一对匹配的花括号限定的语句块中。D. 执行语句A * p=new A100;时,类 A的构造函数只会被调用1 次。4. 类 TM 和类 TN 是两个独立的类,那么类TM 中哪种形式的数据成员一定是不允许的:cA. TM* a; B. TN& a; C. TM a; D. TN a;5. 类 B是通过 public 继承方式从类A派生而来的,且类A
3、和类 B都有完整的实现代码,那么下列说法正确的是:A. 类 B 中具有 pubic可访问性的成员函数个数一定不少于类A中 public成员函数的个数。B. 一个类 B的实例对象占用的内存空间一定不少于一个类A的实例对象占用的内存空间。C. 只要类 B 中的构造函数都是public 的, 在 main 函数中就可以创建类B的实例对象。D. 类 A和类 B中的同名虚函数的返回值类型必须完全一致。6. 下列哪种函数可以是虚的:dA. 自定义的构造函数B. 拷贝构造函数C. 静态成员函数D. 析构函数7. 类A有一个实例化的常量对象a,那么下面的说法中不正确的是:A. 类A中的非静态数据成员一定都是常
4、量成员。B. 通过 a 可以直接调用类A的常量成员函数。C. a不能直接作为左值表达式使用。D. a可以是静态常量对象。8. 在不考虑强制类型转换的情况下,关于类中常量成员函数的下列说法不正确 的是:A. 常量成员函数中不能修改本类中的非静态数据成员。B. 常量成员函数中可以调用本类中的任何静态成员函数。C. 常量成员函数的返回值只能是void 或常量。D. 若常量成员函数中调用虚函数f, 那么函数f 在本类中也一定是一个常量成员函数。9. 类 C是以多重继承的方式从类A和类 B继承而来的,类A和类 B无公共的基类,那么:A. 类 C 的继承方式只能采用public 继承。 B. 可改用单继承
5、的方式实现类C的同样功能。C. 类 A和类 B至少有一个是抽象类。D. 类 A和类 B至少有一个是虚基类。10. 下列哪种用法不能体现类A和类 B之间的组合关系:A. 类A中声明数据成员B b;B. 类A中声明数据成员B* b;C. 类A 中声明数据成员const B&b;D. 类 A中声明成员函数B func( B& obj);二、(共10 分,每题2 分,多选、少选、错选都不得分)多项选择2. 下面关于指针变量和引用变量的说法正确的是:A. 指针变量存放的是内存地址,并且可以置为0。B. 定义引用变量时,必须同时指明具体被引用的对象或变量。C. 使用取地址操作符,可以取得指
6、针变量自身的地址,但取不到引用变量自身的地址。D. 类中的数据成员可以是指针变量,但不能是引用变量。3. 类 A中有唯一的一个公有成员函数f, 对于类 A的一个对象a,执行语句(100);成功,那么f 的函数原型可以为:A. A& f( int, int=50); f(int&) const; A * f(const int ); D. A f( const int&) const;4. 关于类中重载赋值运算符的正确说法是:A. 由编译器提供的缺省赋值函数具有public 访问性并且执行按位赋值。B. 在重载派生类的赋值操作时,不但要实现派生类中数据成员的赋值,还要负责
7、基类中数据成员的赋值。C. 只有在类中含有指针数据成员或引用数据成员时,才需要重载类的赋值操作。D. 通过修改类A的声明或定义,可以禁止用户在类A对象间进行任何赋值操作。5. 在类的静态成员函数的实现体中,可以访问或调用:A. 本类中的静态数据成员B. 本类中非静态的常量数据成员C. 本类中其它的静态成员函数D. 本类中非静态的成员函数6. 关于异常和C+提供的异常处理机制正确的说法是:A. 若程序员预见到程序中的异常,则一定可以通过修改程序代码来避免异常出 现。B. 使用 dynamic_cast操作符可能会产生异常。C. 异常可以用catch 进行捕获处理。D. 异常可以是对象,也可以是普
8、通整数。20 分,每题2 分)判断正误,对于你认为错误的论述,说明原因或举1. 函数体内声明的静态变量,至多只会被初始化一次。2. 对于同一个类中的两个非静态成员函数,它们的函数的名称、参数类型、参 数个数、参数顺序以及返回值的类型不能完全相同。3. inline 函数表示编译器一定会将函数体直接插入到调用此函数的地方,这样可 以加快程序的运行速度。4. 每个 cpp 文件是单独编译的,但一个程序中多个cpp 文件的编译顺序是不固定的。5. 将类A所有构造函数的可访问性都限制为私有的,那么在 main 函数中不可能得到类 A的实例对象。6. 名字空间是可以多层嵌套的;对于类A中的函数成员和数据
9、成员,它们都属于类名 A代表的一层名字空间。7. 若在类 Base和派生类Derived 中,分别声明一个同名的整型成员变量int x; ,那么通过Derived 类的实例对象,不可能输出基类Base中的变量x 的值。8. 若类 A是类 B的友员类,且类B 是类C的友员类,那么类A也是类 C的友员类。9. 虽然抽象类的析构函数可以是纯虚函数,但要实例化其派生类对象,仍必须 提供抽象基类中析构函数的函数体。10. 构造函数的初始化列表中的内容,不会影响构造对象中成员数据的初始化顺序。四、(5 分)写出下面程序的运行结果#include <>class A public:A(int v
10、1)(v1) f( ); virtual A( ) f( ); virtual void f( ) +count; x+=10;Show( );virtual void Show ( ) constcout<<"count="<<count<<" x="<<x<<endl;protected: static int count;private: int x;class B:public A public:B(int v1,int v2):A(v1),y(v2) f( ); virtual B(
11、) f( ); virtual void f( ) +count;y+=50; Show ( );virtual void Show ( ) constcout<<"count="<<count<<" y="<<y<<endl; private:int y;int A:count=0;int main( ) A* p=new B(1,2);p->f( );delete p;return 0;五、(5 分)写出下面程序的运行结果#include <>class A private
12、:friend class B;A(int val=0):data(val),use(1) int use, data;class B B(int val=0):pa(new A(val) B( ) if(-pa->use=0) delete pa; B(const B& rhs) +rhs->use;pa=;B& operator=(const B& rhs);A* operator->( ) const return pa;void Display( ) const cout<<"data="<<pa-&
13、gt;data<<"use="<<pa->use<<endl; private:A * pa;B& B:operator=(const B& rhs)if (this=&rhs) return *this;if (-pa->use=0) delete pa;+rhs->use;pa=;return *this;int main() B b1(1),b2(b1),b3(3);();();();b3=b1;();();return 0;六、(共20 分)回答下列各题1. 说明类中的public、pro
14、tected 和 private 成员函数分别在public、 protected和 private 继承方式下在派生类中的可访问性。(4 分)2. 若类 A和类 B没有继承关系,对于函数void func(A&) ,请至少用两种不同方法说明如何才能传递一个非常量的B 类对象给func 函数。 (4 分 )3. 在声明类中的构造函数、析构函数、纯虚函数、静态成员函数、非静态的成员函数以及全局函数作为类的友元函数时,哪些可以是常量成员函数(3 分)4. 举例说明重载(overload) 、重定义 (redefine) 和重写(override)的含义。( 3 分)5. 通常类 A的拷贝构
15、造函数的原型写为A(const A&);, 请问为什么参数一定要使用引用形式使用const修饰符除了可以防止修改传递给构造函数的实参外,还有什么作用(3 分)6. 程序员规范中要求不要写出类似(+i)+(i+) 或f(+i,i+)这样的代码,请说明原因。(3 分)七、(共8 分)阅读下面部分程序代码,完成3 个问题。#include <>class A public: A(int v1)(v1) virtual int GetData( ) const return x;private: int x;class B:public A public: B(int v1,int
16、 v2):A(v1),y(v2) virtual int GetData( ) const return y;private: int y;class C:public B public: C(int v1,int v2,int v3):B(v1,v2),z(v3) virtual int GetData( ) const return z;private: int z;const A& max2(const A& one,const A& two) return (one>twoone:two); void main() B b(1,2); C c(100,10
17、,1);cout<<max2(b,c).GetData( )<<endl;cout<<max2(b,5).GetData( )<<endl;1) (4 分 )请在不改变上述已有代码的条件下,添加必要的函数使得程序可以编译通过和运行,并输出结果2 和5。其中比较对象时只比较各自的或在派生类定义的数据成员,如比较类B的对象 b 和类 C的对象 c时,实际比较的是和。2) (2分 ) 若不改变函数max2的函数体,只将函数声明改成A& max2(const A&one,const A& two),请问这样行吗为什么3) (2 分
18、 )若main 中有语句A* p=new C(1,2,3);和delete p;,那么类A、类B 和类 C应做何修改八、(共10 分)现考虑编写一个扑克游戏:只用一付无大小王的扑克,扑克的花色(suit)分为Spade、 Heart、 Diamond 和 Club, 每门花色的牌共13 张, 面值 (rank)分别为2、3、4、5、6、7、8、9、10、Jack、Queen、King和Ace,每张扑克牌应包含如下信息:唯一的ID 号 (1-52)、花色、面值、背面图案的编号等。每张扑克牌的操作有:判断两张扑克牌是相同花色吗相同面值吗判断一张扑克牌是给定的花色吗是给定的面值吗请写出扑克牌类Car
19、d类的声明和实现代码,要求选取适当形式的数据成员描述每张扑克牌的信息,同时以成员函数的形式实现指定的操作。九、(共12 分)现有一个2x2 的矩阵,其第一行元素从左到右依次为a1 和a2,第二行元素从左到右依次为a3 和a4,简记此矩阵为M(a1,a2,a3,a4)。对矩阵M可进行两种操作:一种是转置,即交换a2 和 a3 的位置;另一种是变换,即将矩阵M(a1,a2,a3,a4)变换为M(b1,b2,b3,b4),其中bi 是变换 ai 后的结果。假定已有全局函数int GetNextPrime(int data); 它返回比data大的最小素数,若返回值越界则返回2。不用考虑模板,请按下列
20、具体要求实现代码。1)( 6分) 若 ai 都是整数,每次变换都将ai变换成比ai 大的最小素数( i=1,2,3,4) 。请用类 M 描述满足上述条件的矩阵,要求给出类M 的声明和实现代码,同时写出main 函数,并在其中创建一个M(1,10,100,1000)矩阵。2)(6 分)若矩阵中元素a2 和a3 既可以是整数,也可以是另一个满足此定义的矩阵,例如:矩阵M(1, M(2, 3, M(4,5,6,7),9 ,10)。矩阵转置时,既要交换a2和 a3的位置,还要对a2和 a3中的矩阵进行转置;矩阵变换时,同样也要对其中的矩阵元素进行变换。请给出满足此要求的矩阵类M 的声明和实现代码。一、
21、单选 二、多选1. ABC2. ACD3. ABD4. AC5. BCD三、判断对错1. 对2. 错 如可有两个成员函数,int f();和 int f() const;3. 错 是否真正内联,由编译器决定。如函数是递归函数,那么永远不会内联。4. 对5. 错 可通过类的静态成员函数创建实例,如单件模式。6. 对7. 错如可通过继承自基类的成员函数访问基类中的x.8. 错友员关系不具有传递性。9. 对10. 对四、写结果。目的是考察虚函数的调用,包括普通成员函数中调用其它虚函数和在构造、析构函数中只会调用虚函数的本地版本。五、写结果。是一个使用Handle类进行引用计数的例子。六、回答问题1.
22、 重点是基类中的任何Private在派生类中都是不可访问的。2. 可在 A类中定义一个构造函数:A(const B&);或在 B 类中定义一个自动转换函数:operator A( ) const;3. 只有纯虚函数、非静态的成员函数可以是常量成员函数。(这题有点问题,析构函数可以是纯虚函数,但不能是常量函数)4. 如类 A 中有函数int f(void); 和 int f(int); 为重载 (overload) (同名,参数不同)如类 A中有函数int f(void);, A的派生类B中给 int f(void)一个新的实现体,为redefine如类 A中有虚函数virtual in
23、t f(void);,A 的派生类B 中给 virtual int f(void) 一个新的实现体 ,为 override.5. A(const A& one )当调用此拷贝构造函数时,需将参数压栈,若不使用.&,就需要在栈内创建一个one 的副本,而这需要用拷贝构造函数。这样就会形成递归调用。使用const,还允许用一个常量对象作为样本,来构造一个新的对象。6. 计算子表达式的顺序由编译器决定的,虽然参数的压栈顺序在给定的调用方 式下式固定的, 但参数表达式的计算顺序也由编译器决定的。不同的编译器或不同的表达式计算的顺序可能 不一致。七.1. 添加全局函数bool opera
24、tor>(const A& one, const A& two) return ()>();2. 不行。 return (one>twoone:two); 时,不能将常量赋给变量。3. 需要将ABC三个类的析构函数改为虚的。八 . Card类 (不用enum,只用数字也可以)main 函数略中。const enum SUIT SPADE=0,HEART,DIAMOND,CLUB;constenumRANKTWO=0,THREE,FOUR,FIVE,SIX,SEVEN,EIGHT,NINE,TEN,JACK,QUEEN,KING,ACE; class Card
25、public:Card(int id):mID(id),mSuit(id-1)/13),mRank(id-1)%13) bool IsSameSuit(const Card& rhs) return (this=&rhs)false:mSuit=; bool IsSameRank(const Card& rhs) return (this=&rhs)false:mRank=; bool IsSuit(int suit)return mSuit=suit; bool IsRank(int rank)return mRank=rank; private:static int nBackImg;1) class Mpublic:
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 中考物理复习主题单元9第22课时热学计算课件
- 《陋室铭》微课教学设计
- 生产数据安全与隐私保护
- 聘请人力资源专员协议书
- 油漆尘毒防护指南
- 家具定制金箔施工合同
- 临时销售顾问聘用协议
- 体育事业单位员工聘用合同模板
- 云云电子合同服务期合同
- 建筑隧道工程施工合同
- 2024-2030年中国生物炭行业市场发展趋势与前景展望战略分析报告
- 中国融通地产社招笔试
- YDT 4565-2023物联网安全态势感知技术要求
- 营养风险筛查与评估课件(完整版)
- 【工商企业管理专业实操实训报告2600字(论文)】
- 主播薪资核算方案
- 【正版授权】 ISO 3585:1998 EN Borosilicate glass 3.3 - Properties
- 凉山彝族自治州2022-2023学年七年级上学期期末地理试题【带答案】
- 高中数学学业水平考试(合格考)知识点总结
- 《道德与法治》三年级学情分析
- 肥胖症中医诊疗方案专家共识(2022版)
评论
0/150
提交评论