码迷,mamicode.com
首页 > 编程语言 > 详细

C++经典面试题(五)

时间:2015-06-27 16:46:41      阅读:433      评论:0      收藏:0      [点我收藏+]

标签:c   c++   

最近看一些面试题,觉得如果自己被问到了,并不能很利落的回答出来。

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

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



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   c++   

原文地址:http://blog.csdn.net/u011694809/article/details/46659787

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!