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_^*)

版权声明:本文为博主原创文章,未经博主允许不得转载。

时间: 2024-12-29 11:54:44

C++经典面试题(五)的相关文章

Linux 经典面试题

[Linux  经典面试题] 1. 在Linux系统中,以 文件 方式访问设备 . 2. Linux内核引导时,从文件 /etc/fstab 中读取要加载的文件系统. 3. Linux文件系统中每个文件用 i节点 来标识. 4. 全部磁盘块由四个部分组成,分别为引导块 .专用块 . i节点表块 和数据存储块. 5. 链接分为: 硬链接 和 符号链接 . 6. 超级块包含了i节点表 和 空闲块表 等重要的文件系统信息. 7. 某文件的权限为:d-rw-_r--_r--,用数值形式表示该权限,则该八

李洪强IOS开发之-iOS经典面试题

李洪强IOS开发之-iOS经典面试题 写这篇文章的目的是因为前两天同学想应聘iOS开发,从网上找了iOS面试题和答案让我帮忙看看.我扫了一眼,倒吸了一口冷气,仔细一看,气的发抖.整篇题目30多个没有一个答案是对的,总结这篇面试题的作者对iOS机制根本就是一知半解就敢发到网上,不管有心还是无心都是坑害新人.所以在这里总结一下这几年面试别人和被别人面试遇到的一些我认为比较好的基础题目分享给大家,进阶题目在后续补充.我的理解如果有错漏请一定指出,非常感谢! 从12年开始做面试官到现在已经三个年头了,这

【转载】经典10道c/c++语言经典笔试题(含全部所有参考答案)

经典10道c/c++语言经典笔试题(含全部所有参考答案) 1. 下面这段代码的输出是多少(在32位机上). char *p; char *q[20]; char *m[20][20]; int (*n)[10]; struct MyStruct { char dda; double dda1; int type ; }; MyStruct k; printf("%d %d %d %d %d",sizeof(p),sizeof(q),sizeof(m),sizeof(n),sizeof(

iOS经典面试题(转)

iOS经典面试题 前言 写这篇文章的目的是因为前两天同学想应聘iOS开发,从网上找了iOS面试题和答案让我帮忙看看.我扫了一眼,倒吸了一口冷气,仔细一看,气的发抖.整篇题目30多个没有一个答案是对的,总结这篇面试题的作者对iOS机制根本就是一知半解就敢发到网上,不管有心还是无心都是坑害新人.所以在这里总结一下这几年面试别人和被别人面试遇到的一些我认为比较好的基础题目分享给大家,进阶题目在后续补充.我的理解如果有错漏请一定指出,非常感谢! 从12年开始做面试官到现在已经三个年头了,这期面过很多形形

.Net经典面试题

1.同一平台: 2.Bootstrap 3.webAPI 4.SignalR 5.ASP.Identity 6.OWIN 二. ObjectContext: 用于控制ASP的交易(Transaction),交易由Microsoft Transaction Server(MTS)管理 三.asp 是解释执行 asp.net是编译执行的 四.列举ASP.NET 页面之间传递值的几种方式. 答. 1.使用QueryString,  如....?id=1; response. Redirect()...

【转】嵌入式软件工程师经典笔试题

嵌入式软件工程师经典笔试题 > 预处理器(Preprocessor) 1. 用预处理指令#define 声明一个常数,用以表明1年中有多少秒(忽略闰年问题) #define SECONDS_PER_YEAR (60 * 60 * 24 * 365)UL 我在这想看到几件事情: 1). #define 语法的基本知识(例如:不能以分号结束,括号的使用,等等) 2). 懂得预处理器将为你计算常数表达式的值,因此,直接写出你是如何计算一年中 有多少秒而不是计算出实际的值,是更清晰而没有代价的. 3).

李洪强iOS经典面试题总结

iOS经典面试题总结--内存管理 我根据自己的情况做了一下总结,答案是我总结的,如有答的不好的地方,希望批评指正以及交流,谢谢! 内存管理 1.什么是ARC? ARC是automatic reference counting自动引用计数,在程序编译时自动加入retain/release.在对象被创建时retain count+1,在对象被release时count-1,当count=0时,销毁对象.程序中加入autoreleasepool对象会由系统自动加上autorelease方法,如果该对象

【转】.net 经典面试题

[转].net 经典面试题 1. 简述 private. protected. public. internal 修饰符的访问权限. 答 . private : 私有成员, 在类的内部才可以访问. protected : 保护成员,该类内部和继承类中可以访问. public : 公共成员,完全公开,没有访问限制. internal: 在同一命名空间内可以访问. 2 .列举ASP.NET 页面之间传递值的几种方式. 答. 1.使用QueryString, 如....?id=1; response.

50个C/C++经典面试题

C/C++经典面试题  面试题1:变量的声明和定义有什么区别 为变量分配地址和存储空间的称为定义,不分配地址的称为声明.一个变量可以在多个地方声明, 但是只在一个地方定义.加入extern 修饰的是变量的声明,说明此变量将在文件以外或在文件后面部分 定义. 说明:很多时候一个变量,只是声明不分配内存空间,直到具体使用时才初始化,分配内存空间, 如外部变量. 面试题2 :写出bool .int. float .指针变量与 “零值”比较的if 语句 bool 型数据: if( flag ) { A;