您的位置:首页 > 编程语言 > C语言/C++

C++经典面试题(五)

2015-06-27 11:10 477 查看
最近看一些面试题,觉得如果自己被问到了,并不能很利落的回答出来。

一是从来没有这个意识,二是没有认真的梳理下。

下面对这些题做出分析,哈!个人能力有限,其中难免有疏漏,欢迎大家补充咯!

41.多态的作用?

【参考答案】

主要是两个:

1. 隐藏实现细节,使得代码能够模块化;扩展代码模块,实现代码重用;

2. 接口重用:为了类在继承和派生的时候,保证使用家族中任一类的实例的某一属性时的正确调用。

42.当一个类A 中没有声明任何成员变量与成员函数,这时sizeof(A)的值是多少,如果不是零,请解释一下编译器为什么没有让它为零。

【标准答案】sizeof(A)= 1;

编译器不允许一个类的大小为0,会为它分配1字节的内存。试想,若,不这样做,那2个类A的实例在内存中将会无法区分。。。

43.如果Class A中定义并实现虚函数int func(void),Class B中也实现该函数,

那么

A a;
a->func()

将调用哪个类里面的函数?如果int func(void)不是虚函数,情况又如何?为什么?

【参考答案】第一问调用的是B的。第二问调用A的。虚函数的一个典型应用,虚函数只能借助于指针或者引用来达到多态的效果。

44.C++里面是不是所有的动作都是main()引起的?如果不是,请举例。

【参考答案】比如全局变量的初始化,就不是由main函数引起的。举例:                                                                     class A{};
A a; //a的构造函数限执行
int main() {}

45. 内联函数在编译时是否做参数类型检查

【参考答案】内联函数要做参数类型检查,   这是内联函数跟宏相比的优势。 

46.请讲一讲析构函数和虚函数的用法和作用? 

【参考答案】

析构函数是特殊的类成员函数,它没有返回类型,没有参数,不能随意调用,也没有重载,只有在类对象的生命期结束的时候,由系统自动调用。 有适放内存空间的作用。

虚函数是C++多态的一种表现, 使用虚函数,我们可以灵活的进行动态绑定,当然是以一定的开销为代价。

如果一个类是作为基类存在的,一定要声明一个虚析构函数,否则删除动态分配的子类实例时会出现"局部删除",造成内存泄露和未知错误

47.“new”in c++ is a:

A. library function like malloc in c 

B. key word

C. operator

D. none of the above

【参考答案】C。malloc是库函数,不在编译器控制范围之内;new是运算符,在编译器控制范围之内。   调用malloc时,从堆中申请内存;调用new时,从堆中申请内存并为内存调用构造函数。

48.对于C++中类(class) 与结构(struct)的描述正确的为:

A,类中的成员默认是private的,当是可以声明public,private 和protected,结构中定义的成员默认的都是public;

B,结构中不允许定义成员函数,当是类中可以定义成员函数;

C,结构实例使用malloc() 动态创建,类对象使用new 操作符动态分配内存;

D,结构和类对象都必须使用new 创建;

E,结构中不可以定义虚函数,当是类中可以定义虚函数.

F,结构不可以存在继承关系,当是类可以存在继承关系.

【标准答案】A,D

更多内容,参见
C++经典面试题(一)

49.两个互相独立的类:ClassA 和 ClassB,都各自定义了非静态的公有成员函数 PublicFunc() 和非静态的私有成员函数 PrivateFunc();现在要在ClassA
中增加定义一个成员函数ClassA::AdditionalPunction(ClassA a,ClassB b);则可以在AdditionalPunction(ClassAx,ClassB y)的实现部分(函数功能体内部)出现的合法的表达是最全的是: 

A,x.PrivateFunc();x.PublicFunc();y.PrivateFunc();y.PublicFunc();

B,x.PrivateFunc();x.PublicFunc();y.PublicFunc();

C,x.PrivateFunc();y.PrivateFunc();y.PublicFunc();

D,x.PublicFunc();y.PublicFunc();

【标准答案】B

(主要考察private和public的作用,private下的成员变量和成员函数只能由类本身的成员变量和函数访问,子类不行、其它类更不行)

50.C++程序下列说法正确的有:

A,对调用的虚函数和模板类都进行迟后编译.

B,基类与子类中函数如果要构成虚函数,除了要求在基类中用virtual 声明,而且必须名字相同且参数类型相同返回类型相同。

C,重载的类成员函数都必须要:或者返回类型不同,或者参数数目不同,或者参数序列的类型不同.

D,静态成员函数和内联函数不能是虚函数,友员函数和构造函数也不能是虚函数,但是析构函数可以是虚函数.

【标准答案】A

这道题查了不少资料了,各种说法都有,说下我的理解吧,

首先,没有继承性的函数都不能是虚函数,因为这样毫无意义。所以,普通函数是不能作为虚函数存在的。

A中,虚函数是动态联编的,但模板类是在编译期间就确定的,迟后编译应该也是动态联编,这样A应该是错的?!

B中,如果基类中声明一个虚函数,子类函数和基类函数的名字、参数类型、返回类型有任一不同,都将会生成一个新的函数。这样看来,B应该是正确的。

C中,切记,重载的函数之间的不同,不包括返回类型!

D中,静态函数在类中只有一份,被所有对象共享,不存在多态性,自然不能是虚函数;

内联函数在编译时直接展开,自然也不能是虚函数;

友元函数不是类的成员函数,不能被继承,故而也不能被声明为虚函数;

构造函数不能够被继承,不能是虚函数,并且,构造函数是用来执行初始化的,虚函数是用来实现多态性的。若尚未构造出来,如何实现多态?!显然行不通。

未完。。。待续(*^_v_^*)
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  c c++