继承 多态 组合

1. 关于函数模板,描述错误的是? 

正确答案: A   你的答案: C (错误)

A.  函数模板必须由程序员实例化为可执行的函数模板

B.  函数模板的实例化由编译器实现

C.  一个类定义中,只要有一个函数模板,则这个类是类模板

D.  类模板的成员函数都是函数模板,类模板实例化后,成员函数也随之实例化

解析:

函数模板必须由编译器根据程序员的调用类型实例化为可执行的函数

 

2. 假设在一个 32 little endian 的机器上运行下面的程序,结果是多少?

#include <stdio.h>

int main(){

  long long a = 1, b = 2, c = 3; 

  printf("%d %d %d\n", a, b, c);  

 return 0;

}

正确答案: B  你的答案: A (错误)

A.  1,2,3

B.  1,0,2

C.  1,3,2

D.  3,2,1

 

解析:


1 printf()是一个库函数,CC++中函数的参数是从右往左入栈的;

2 栈的生长方向是从高往低的

3 小端模式是低位存储在低字节

4 %d格式输出的是4个字节大小,而long long8个字节

所以,a=1,b=0,c=2

3.   所谓私有成员是指只有类中所提供的成员函数才能直接使用它们,任何类以外的函数对它们的访问都是非法的。

正确答案: B  

A.   
B.   
解析:

设置友元函数,可以允许外面的类或函数去访问类的私有变量和保护变量,从而使两个类共享同一函数。

 

4.   观察下面一段代码:

class ClassA

{

public:

    virtual ~ ClassA(){};

    virtual void FunctionA(){};

};

class ClassB

{

public:

   virtual void FunctionB(){};

};

class ClassC : public ClassA,public ClassB

{

    public:

};

  

ClassC aObject;

ClassA* pA=&aObject;

ClassB* pB=&aObject;

ClassC* pC=&aObject;

关于pA,pB,pC的取值,下面的描述中正确的是:

正确答案: C  你的答案: D (错误)

A.   pA,pB,pC的取值相同.
B.   pC=pA+pB
C.   pApB不相同
D.   pC不等于pA也不等于pB
解析:

C多重继承自ABAB两个基类都有两个虚函数表,其中按照继承顺序,A的虚函数表排在B的虚函数表前面,则选择C

 aObject的地址从A的虚函数表开始,然后到B的虚函数表,再到C自身的成员。

在这个情况下,子类的指针和第一个基类的指针应该是一样的,和第二个基类是不一样的。

 

5. 假设A为抽象类,下列声明( )是正确的。

正确答案: D   你的答案: B (错误)

int fun(A);

A.  A Obj;

B.  A fun(int);

C.  A *p;

解析:

c++中包含纯虚函数的类称为抽象类,由于抽象类中包含了没有定义的纯虚函数,所以不能定义抽象类的对象。

总结:1.抽象类只能用作其他类的基类,不能定义抽象类的对象

2.抽象类不能用于参数类型、函数返回值或显示转换的类型

3.抽象类可以定义抽象类的指针和引用,此指针可以指向它的派生类,进而实现多态性。

 

6.    关于虚函数的描述正确的是()

正确答案: B   你的答案: C (错误)

A.  派生类的虚函数与基类的虚函数具有不同的参数个数和类型

B.  内联函数不能是虚函数

C.  派生类必须重新定义基类的虚函数

D.  虚函数可以是一个static型的函数

解析:

虚函数是为了实现动态绑定,不能声明为虚函数的有:

1、静态成员函数; 2、类外的普通函数; 3、构造函数; 4、友元函数

此外,还有一些函数可以声明为虚函数,但是没有意义,但编译器不会报错,如:

1、赋值运算符的重载成员函数:因为复制操作符的重载函数往往要求形参与类本身的类型一致才能实现函数功能,故形参类型往往是基类的类型,因此即使声明为虚函数,也把虚函数当普通基类普通函数使用。

2、内联函数:内联函数目的是在代码中直接展开(编译期),而虚函数是为了继承后能动态绑定执行自己的动作(动态绑定),因此本质是矛盾的,因此即使内联函数声明为虚函数,编译器遇到这种情况是不会进行inline展开的,而是当作普通函数来处理。因此声明了虚函数不能实现内敛的,即内敛函数可以声明为虚函数,但是毫无了内联的意义

 

7.    下面有关继承、多态、组合的描述,说法错误的是?

正确答案: B D   你的答案: C D (错误)

A.  封装,把客观事物封装成抽象的类,并且类可以把自己的数据和方法只让可信的类或者对象操作,对不可信的进行信息隐藏

B.  继承可以使用现有类的所有功能,并在无需重新编写原来的类的情况下对这些功能进行扩展

C.  隐藏是指派生类中的函数把基类中相同名字的函数屏蔽掉了

D.  覆盖是指不同的函数使用相同的函数名,但是函数的参数个数或类型不同

解析:

重载:只有在 同一类定义中的同名成员函数才存在重载关系 ,主要特点是 函数的参数类型和数目有所不同 ,但 不能出现函数参数的个数和类型均相同 ,仅仅依靠返回值类型不同来区分的函数,这和普通函数的重载是完全一致的。另外,重载和成员函数是否是虚函数无关

覆盖:派生类中覆盖基类中的同名函数,要求两个函数的参数个数、参数类型、返回类型都相同,且基类函数必须是虚函数。

隐藏:派生类中的函数屏蔽了基类中的同名函数,

2个函数参数相同,但基类函数不是虚函数(和覆盖的区别在于基类函数是否是虚函数)。2个函数参数不同,无论基类函数是否是虚函数,基类函数都会被屏蔽(和重载的区别在于两个函数不在同一类中)。

 

8.    C++语言中,有关类的初始化叙述正确的是()

正确答案: A D   你的答案: A B D (错误)

A.  静态函数中不能出现this指针

B.  可以在类定义时,对对象直接初始化

C.  一般数据类型可以在类的外部进行初始化

D.  静态数据类型可以在类的外部进行初始化

解析:

A:静态函数属于类本身,不与类绑定,因此不能用this指针。A选项正确。

B:在类定义时,无法使用构造函数,因而无法完成对象的初始化

C:一般成员变量需要在类内进行初始化

D:静态成员变量必须在类外初始化,静态成员常量在类中初始化。D选项正确。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值