最近看一些面试题,觉得如果自己被问到了,并不能很利落的回答出来。
一是从来没有这个意识,二是没有认真的梳理下。
下面对这些题做出分析,哈!个人能力有限,其中难免有疏漏,欢迎大家补充咯!
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_^*)
版权声明:本文为博主原创文章,未经博主允许不得转载。