资源描述
1. 在一个被调用函数中,关于return语句的描述错误的是( D )
A. 被调用的函数可以不用return语句 B. 被调用的函数可以使用多个return语句
C. 被调用的函数如果有返回值,就一定要有return语句
D. 被调用的函数中,一个return语句可以返回多个值给调用和函数
2. 下面关于成员函数的叙述中错误的是( A )
A. 成员函数一定是内联函数
B. 成员函数可以设置参数默认值
C. 成员函数可以重载
D. 成员函数可以是静态的
3. 派生类的对象可以访问基类成员中的( C )
A. 公有继承的保护成员 B. 保护继承的公有成员
C. 公有继承的公有成员 D. 保护继承的保护成员
4. 在带有虚基类的多层派生类构造函数的成员初始化列表中都要列出虚基类的构造函数传递参数,这样将对虚基类的子对象初始化( A ) P266
A. 与虚基类下面的派生类个数有关 B. 多次
C. 二次 D. 一次
5. 在磁盘文件操作中,以追加方式打开文件的访问方式常量是( C ) P488
A. in B. out C. app D. ate
6. 假定A为一个类,则执行“A a(4),b[3],*p[2];”时,调用该类构造函数的次数为( B
A. 3 B. 4 C. 6 D. 9
7. 假定要对类AB定义加号操作符重载成员函数,实现两个AB类对象的加法,并返回相加结果,则该成员函数的声明语句为( B )
A. AB operator +(AB&a,AB&b) B. AB operator +(AB&a)
C. operator +(AB a) D. AB&operator+( )
8. 若类的成员函数是在类中定义的,则默认为( D)函数
A. 构造 B. 析构 C. 友元 D. 内联(inline)
9. 在下面的函数声明中,存在语法错误的是( D )
A. void BC(int a, int) B。 void BD(int, int)
C. void BE(int, int=5) D。 int BF(int x ; int y)
10. 下面是关于构造函数的说法,不正确的是( C )。P108
A. C++规定,每一个类必须有一个构造函数,没有构造函数就不能创建对象
B. 如果没有提供一个类的构造函数(一个都未提供),则C++提供一个默认的构造函数,该默认构造函数是个无参构造函数,它仅仅负责创建对象
C. 虽然一个类定义了一个构造函数(不一定是无参构造函数),C++仍然提供默认的构造函数
D. 与变量定义类似,在用默认构造函数创建对象时,如果创建的是全局对象或静态对象,则对象的位模式全为0,否则,对象值是随机的
11. 多重继承的构造顺序一般可分为4步,下面给出这4个步骤:
step1: 任何非虚拟基类的构造函数按照它们被继承的顺序构造。
step2: 任何虚拟基类的构造函数按照它们被继承的顺序构造。
step3: 任何成员对象的构造函数按照它们声明的顺序构造。
step4: 类自己的构造函数。
这4个步骤的正确顺序是( C )。 P279
A. step4、step3、step1、step2 B. step2、step4、step3、step1
C. step2、step1、step3、step4 D. step3、step4、step1、step2
12. 友元运算符obj++被C++编译器解释为( B )。
A. operator++(obj) B. operator++(obj,0)
B. obj.operator++( ) D. obj.operator++(0)
13. 声明类test的复制构造函数的正确形式是( D )。
A. int test B. void test C. test(void) D. test(test&)
14. 如果两个以上的函数,具有如下特点:只有参数类型不同,返回值类型不同,功能完全一样,则为了提高代码的可重用性,可以使用( C )
A.重载函数 B.内联函数
C.函数模板 D.递归调用
15. 关于友元类的描述,错误的是 A
A. 友元类被说明在一个类中,它与访问权限无关
B. 友元类中的成员函数都是友元函数
C. 友元类是被定义在某个类中的
D. 如果类Y是类X的友元类,则类X不一定是类Y的友元类
16. 下面程序的运行结果是 A
void f( )
{ static int a=10;
int b=1;
a=a+b;
cout<<a<<" ";
}
void main()
{ f( );f( ); }
A.11 12 B.11 11 C.12 12 D.10 11
17. 对于动态分配内存空间描述正确的是( A )
A.使用new运算符分配的内存空间的长度必需是常量
B.delete运算符可以释放动态的存储空间和静态的存储空间
C.由new分配的内存空间是不连续的
D.delete运算符只能释放由new分配的动态存储空间
18. 在C++中,下面的运算符不可重载的是( A )
A.三目运算符?: B. 比较运算符
C. 赋值运算符 D. 逗号运算符
01、下列关于C++函数的叙述中,正确的是( C )。
A)每个函数至少要具有一个参数 B)每个函数都必须返回一个值
C)函数在被调用之前必须先声明 D)函数不能自己调用自己
02、下列关于类和对象的叙述中,错误的是( A )。
A)一个类只能有一个对象 B)对象是类的具体实例
C)类是对某一类对象的抽象 D)类和对象的关系是一种数据类型与变量的关系
03、在C++中,用于实现运行时多态性的是( D )。
A)内联函数 B)重载函数 C)模板函数 D)虚函数
04、下列关于运算符重载的叙述中,正确的是( C )。
A)通过运算符重载,可以定义新的运算符 B)有的运算符只能作为成员函数重载
C)若重载运算符+,则相应的运算符函数名是+ D)重载二元运算符时,必须声明两个形参
05、对于语句 cout<<x<<endl;错误的是描述是( D )。P493
A)“cout”是一个输出流对象 B)“endl”的作用是输出回车换行
C)“x”是一个变量 D)“<<”称作提取运算符(>>)
06、有如下类声明,则类MyDERIVED中保护的数据成员和成员函数的个数是( B )。
class MyBASE
{ private: int k;
public: void set(int n){ k=n;}
int get( )const{ return k;} };
class MyDERIVED: protected MyBASE
{ protected: int j;
public: void set(int m, int n){ MyBASE::set(m); j=n;}
int get( ) const { return MyBASE::get( )+j; } };
A)4 B)3 C)2 D)1
07、已知在一个类体中包含如下函数原型: Volume operator-(Volume)const;,下列关于这个函数的叙述中,错误的是( C )。P308
A)这是运算符-的重载运算符函数 B)这个函数所重载的运算符是一个一元运算符
C)这是一个成员函数 D)这个函数不改变类的任何数据成员的值
08、执行如下的程序段后,输出结果是( A )。
cout.fill('*'); cout.width(6); cout.fill('#'); cout << 123 << endl;
A)###123 B)123### C)***123 D)123***
09、在下列函数原型中,可以作为类AA构造函数的是( D )。
A)void AA(int); B)int AA(); C)AA(int)const; D)AA(int);
10、下面四个选项中,( A )是用来声明虚函数的。
A)virtual B)public C)include D)using namespace
11、实现运行时的多态性要使用( D )。
A)重载函数 B)构造函数 C)析构函数 D)虚函数
12、要实现动态联编,必须通过( A )调用虚函数。 P316
A)对象指针 B)成员名限定 C)对象名 D)派生类名
13、以下( C )成员函数表示纯虚函数。 P322
A)virtual int vf(int); B)void vf(int)=0;
C)virtual void vf()=0; D)virtual void vf(int){}
14、有如下类声明:class XA
{ private: int x;
public: XA(int n){ x=n;} };
class XB: public XA
{ private: int y;
public: XB(int a,int b); };
在构造函数XB的下列定义中,正确的是( D )。
A)XB::XB(int a,int b): x(a),y(b){ } B)XB::XB(int a,int b): XA(a),y(b){ }
C)XB::XB(int a,int b): x(a),XB(b){ } D)XB::XB(int a,int b): XA(a),XB(b){ }
15、在表达式 x+y*z中, + 是作为成员函数重载的运算符,* 是作为非成员函数重载的运算符。则 operator+ 有 个参数,operator* 有 参数。( C )
A)2、2 B)2、1 C)1、2 D)1、1
16、应在下列程序划线处填入的正确语句是( C )。
class Base
{ public:
void fun(){cout<<"Base::fun"<<endl;} };
class Derived:public Base
{ void fun()
{ //显示调用基类的函数fun()
cout<<"Derived::fun"<<endl; } };
A)fun(); B)Base.fun(); C)Base::fun(); D) Base->fun();
3、根据访问权限的不同,可将类的成员分为三类__PUBLIC__ 、__PROTECT__ 和__PRIVATE __ 。
4、在函数调用过程中,当实参是一个数组名时,对应的形参必须是__数组__ 或__指针__ 。
5、指针变量包含另一变量的__地址__ 值。
17、面向对象程序设计有四个主要特点,即抽象、封装、__继承__和__多态__。
16.、动态内存的分配和释放采用关键词______new_______和______delete_____来描述。
18、非成员函数应声明为类的__友元__函数才能访问这个类的private成员。
19、派生类中的成员不能直接访问基类中的__私有__成员。
20、在用class定义一个类时,数据成员和成员函数的默认访问权限是__private__。
21、运算符重载函数可能是类的__成员__函数,也可以是类的_非成员_函数,还可以是普通函数。
23、含有纯虚函数的类称为__抽象类__。
4.假定AB为一个类,则执行”AB a[10];”语句时,系统自动调用该类构造函数的次数
为___10___
5.使用const语句定义一个标识符常量时,则必须对它同时进行__初始化_____
6.假定p所指对象的值为25,p+1所指对象的值为46,则执行“(*p)++;”语句后,p所指对象的值为__26_____
7.设px是指向一个类动态对象的指针变量,则执行”delete px;”语句时,将自动调用该类的___析构函数____
(!选择题、填空题可以互换的,所以弄懂题目意思才是关键,结合其中考试,大概有60分的样子)
1. 请比较complex &operator+(const &complex c1,const complex &c2)和complex operator+(complex c1,complex c2)两种表达方法的不同,叙述的越详细越好。
第一个:返回一个引用,不产生副本。且第一个参数为常引用,第二个为引用常量,安全效率高
第二个:返回对象本身,执行过程中产生副本,且都是值传递,存在危险性且效率不高。
2. 比较赋值和初始化的区别,请举例说明
赋值是在定义变量后通过“=”给变量一个值, int i; i=5;
初始化是定义变量的同时给他一个初值。 Int i=5;
3. 构造函数和复制构造函数什么时候被调用,请举例说明
构造函数在创建对象时自动被调用, clock a;
复制构造函数在:1,用类的对象去初始化该类的另一对象时;Point b(a);
2,函数的返回值为类的对象,函数执行完后返回调用者;
point g(){point a(1,2);return a;} int main(){point b;b=g();return 0}
3,函数的形参为类的对象,调用函数时,进行形参实参系相结合时Void f(point p){}
时自动调用复制构造函数。
4. 请说明虚函数的特点,叙述的越详细越好。
26、写出执行下面程序的输出结果。
void fun(int &x, int y)
{ int t=x; x=y; y=t; }
int main( )
{ int a[2] = {23, 42};
fun(a[1],a[0]);
std::cout<<a[0]<<","<<a[1]<<std::endl;
return 0; }
23,23
27、写出执行下面程序的输出结果。
class A { public: A() { cout<<"A"; } };
class B { public: B() { cout<<"B"; } };
class C : public A
{ B b;
public: C() { cout<<"C"; }
};
int main( ) { C obj; return 0; }
{
base *p;
base b_obj;
dervied d_obj;
p=&b_obj;
p->setx(11);
cout<<"base object x:"<<p->getx()<<endl;
p=&d_obj;
p->setx(66);
cout<<"dervied object x:"<<p->getx()<<endl;
d_obj.setx(66);
cout<<"dervied object x:"<<d_obj.getx()<<endl;
d_obj.sety(88);
cout<<"dervied object y:"<<d_obj.gety()<<endl;
}
base object x:11
dervied object x:66
dervied object x:66
dervied object y:88
ABC
27、写出执行下面程序的输出结果。
class base
{
int x;
public:
void setx(int i) { x=i; }
int getx( ) { return x;}
};
class dervied:public base
{
int y;
public:
void sety(int i) { y=i; }
int gety() { return y; }
};
void main( )
1、构造求两数之和的重载函数,请填空完善函数。(6分)
#include<iostream.h>
int add(__int_a_,__int_b__________)
{ return a+b; }
double add(__double__a_,__double__b________)
{ return a+b; }
void main()
{ cout<<add(5,10); cout<<add(5.0,10.0); }
2、定义了一个表示坐标系内点的类,请写出程序的输出结果。
#include<iostream.h>
class point{
构造函数被调用
构造函数被调用
析构函数被调用(析构(3,4))
复制构造函数被调用
析构函数被调用
析构函数被调用
public: point(int xx=0,int yy=0) {
cout<<”构造函数被调用”<<endl;
x=xx;y=yy; }
point(point &p){
cout<<”复制构造函数被调用”<<endl;
x=p.x;y=p.y }
~point()
{ cout<<”析构函数被调用”<<endl; }
private: int x,y;
};
void main(){
point A(0,1);point(3,4);
point B(A); }
3、分析下列程序,写出输出结果。
#include<iostream.h>
class myclass{
myclass(int a,int b,int c)
{ A=a;B=b;C=c; sum=sum+A+B+C; }
void getnumber()
{ cout<<”number=”<<A<<”,”<<B<<”,”<<C<<endl; }
void getsum()
{ cout<<”sum=”<<sum<<endl; }
private:int A,B,C;
static int sum;
};
int myclass::sum=0;
void main(){
myclass M(1,2,3),N(4,5,6);
M.getnum();N.getnum();
M.getsum();N.getsum(); }
number=1,2,3
number=4,5,6
Sum=21
Sum=21
1.习题4.20
2.向一个已经存在的文件(1.txt)中追加字符串“I love you!”
展开阅读全文