:
n;
}
A.20,20B.10,20C.20,10D.10,10
20.判断题:
友元(friend)没有破坏类的封装。
错误
21.下面哪种说法是正确的:
B
A.派生类从基类public派生,派生类可以直接访问基类private的成员变量和成员函数。
B.派生类从基类public派生,派生类可以直接访问基类protected的成员变量和成员函数。
C.派生类从基类public派生,外部可以直接访问派生类中基类部分protected的成员变量和成员函数。
D.派生类从基类protected派生,外部可以直接访问派生类中基类部分public的成员变量和成员函数。
22.下面哪种说法是不正确的:
D
A.外部对象不能直接访问类private的成员变量和使用private的成员函数。
B.外部对象不能直接访问类protected的成员变量和使用protected的成员函数。
C.外部对象可以直接访问类public的成员变量和使用public的成员函数。
D.友元(friend)不能直接访问类的private的成员变量和使用private的成员函数。
23.下面那个不是类成员访问限定符:
D
A.publicB.privateC.protectedD.friend
24.请阅读下面程序片断,成员函数setName的访问限定是什么?
A
structMan
{
voidsetName(conststd:
:
string&strName);
voidsetAge(unsignedintiAge);
std:
:
stringgetName()const;
unsignedintgetAge()const;
private:
unsignedintm_iAge;
std:
:
stringm_strName;
};
A.publicB.privateC.protectedD.friend
25.下面说法是否正确?
错误
存在下面重载函数声明:
1)voidmyfunc(chara);
2)voidmyfunc(longb);
则下面调用的代码匹配第一个函数
intc=100;
myfunc(c);
26.下面哪种情形下myfunc函数声明是重载?
C
A.intmyfunc(inta,doubleb)和doublemyfunc(inta,doubleb)
B.intmyfunc(inta,doubleb)和intmyfunc(inta,doubleb=0.5)
C.intmyfunc(inta,doubleb)和intmyfunc(doubleb,inta)
D.intmyfunc(inta,doubleb)和doublemyfunc(int,double)
27.下面那种情形下myfunc函数声明是重载?
B
A.namespaceIBM{//两个名字空间中各有一个myfunc函数
intmyfunc(inta);
}
namespaceSUN{
intmyfunc(doubleb);
}
B.namespaceIBM{
intmyfunc(inta);
}
namespaceSUN{
usingnamespaceIBM;
intmyfunc(doubleb);
}
C.namespaceIBM{
intmyfunc(inta);
namespaceSUN{
intmyfunc(doubleb);
}
}
D.classA
{
public:
intmyfunc(inta);
}
classSubA:
publicA
{
public:
intmyfunc(doubleb);//注意这里不是重载
}
28.下面说法正确的是:
D
A.操作符重载可以改变操作符的运算优先级。
B.操作符重载时,其预定义的操作数可以改变。
例如“!
”是一元操作符,可以重载成有两个参数的二元操作符。
C.C++中所有的操作符都可以被重载。
D.对于内置数据类型的操作符,它预定义的意义不能被修改;也不能为内置数据类型定义其它操作符。
例如不能定义intoperator+(int,int);也不能定义voidoperator+(int[],int[])。
29.假如运行环境int类型4bytes,short类型2bytes,long类型8bytes,存在代码:
D
unsignedshortx=65530;
inta=myfunc(x,20.0);
会优先匹配以下哪一个重载函数?
A.intmyfunc(double,double)
B.intmyfunc(short,double)
C.doublemyfunc(int,float)
D.doublemyfunc(int,double)
30.判断题类的析构函数可以是虚函数,但构造函数不可以。
正确
31.判断题一个类的构造函数可以有多个,但析构函数只能有一个。
正确
32.判断题当一个类中有指向其他资源的指针,并由类本身释放,那么可以使用编译系统生成的默认拷贝构造函数进行对象复制。
错误
33.判断题下面的代码是否正确(错误)
classCSomething
{
char*m_c;
public:
CSomething(){m_c=newchar;}
~CSomething(){deletem_c;m_c=NULL;}
CSomething(constCSomething&other)//拷贝构造
{*m_c=*other.m_c;}//这里有问题,此时m_c没有空间,应该先m_c=newchar;
CSomething&operator=(constCSomething&a1){……}//重载操作符应该跟拷贝构造是一样的
};
34.CSomething是一个类,执行下面这些语句后,内存里创建了多少个CSomething对象?
B
CSomethinga;//1个
CSomethingb
(2);//1个
CSomethingc[3];//3个
CSomething&ra=a;
CSomethingd=a;//1个
CSomething*pA=c;
CSomething*p=newCSomething(4);//1个
A.8B.7C.10D.9
35.已知类D是类B的派生类,B有自己的私有数据成员,并实现了自己的拷贝构造函数,类D的拷贝构造函数应该怎么实现?
D
A、B、
D:
:
D(constD&other)D:
:
D(constD&other)
{{
拷贝类D新增的成员拷贝父类B的成员
}拷贝类D新增的成员
}
C、D、
D:
:
D(constD&other)D:
:
D(constD&other):
B(other)
{{
B:
:
B(other);拷贝类D新增的成员
拷贝类D新增的成员}
}
36.关于类的构造和析构,下面哪个说法正确C
A、构造函数和析构函数都是由系统自动调用的,程序不能主动调用//可以主动调用
B、如果一个类没有声明缺省构造函数,则编译器会自动生成一个缺省构造函数
C、全局类对象的构造函数总是在main函数之前执行的
D、构造函数和析构函数均不能被说明为虚函数//析构函数可以是虚的
37.在执行newA1时,下面代码的输出是什么A
#include
intinit(conststd:
:
string&info)
{
std:
:
cout<:
endl;
return0;
}
classA
{
intm_x;
public:
A():
m_x(init("InitA:
:
m_x")){init("CallA:
:
A()");}//定义构造函数
};
classA1:
publicA
{
intm_x;
intm_y;
public:
A1():
m_x(init("InitA1:
:
m_x")),m_y(init("InitA1:
:
m_y"))
{init("CallA1:
:
A1()");}
};
A、B、
InitA:
:
m_xCallA1:
:
A1()
CallA:
:
A()InitA1:
:
m_x
InitA1:
:
m_xInitA1:
:
m_y
InitA1:
:
m_yCallA:
:
A()
CallA1:
:
A1()InitA:
:
m_x
C、D、
InitA:
:
m_xCallA1:
:
A1()
CallA:
:
A()InitA1:
:
m_x
InitA1:
:
m_yInitA1:
:
m_y
CallA1:
:
A1()CallA:
:
A()
38.有如下的类定义
classBase
{
...
public:
virtual~Base(){std:
:
cout<<"DestroyBase"<:
endl;}
};
classDerive1:
pub