第一题
面向对象编程的三大特征?
答案:继承、封装、多态。
知识背景:
继承的目的是为了提高代码的复用性和可扩展性;封装的目的是为了保证变量的安全性,使用者不必在意具体实现细节,而只是通过外部接口即可访问类的成员;多态的目的是实现了动态联编,使程序运行效率更高,更容易维护和操作。这也是C++和C语言区别,C语言是面向过程的语言,他的核心是函数,而C++是面向对象的语言,他的核心是类和对象。其实,C++是C语言的超集。
这是相当基础的一个问题,面试的时候决定了你是否会被直接pass。如果你不会,那就要小心啦。
第二题
C++的内存有哪几种类型?
答案: 堆(malloc)、栈(stack)、程序代码区、全局/静态存储区、常量存储区。
知识背景:
堆区:由new申请分配的内存块,我们通过应用程序来动态控制它们的申请和释放。如果程序没有正确释放它们,那么程序结束后,由操作系统自动回收。
栈区:由编译器自动申请和释放的内存块,通常用来存储局部变量、临时变量、函数参数。执行效率高,但是分配的内存容量有限。
程序代码区:存放程序二进制代码。
全局/静态存储区: 全局变量和静态变量是存储在一块的,程序结束后由系统释放。
常量存储区:存储常量的内存块,不允许被修改。
C++编程经常会涉及到内存的管理问题,所以对于C++内存的存储类型,我们还是很有必要掌握的!
第三题
哪些因素可能会影响到一个类的大小?
答案:非静态数据成员个数、是否有虚函数、对齐方式。
知识背景:
一个类的大小 = 所有非静态数据成员大小 + 虚函数表 + 因对齐而多出的字节,其中,不论有多少个虚函数,都只有一个指向虚函数表的指针,占用4字节(32位系统)或者占用8字节(64位系统)。
引申出的题目:
在64位系统中,有如下类:
那么,sizeof(C)的数值是?
面试时候很常见的题目,自己遇到的C++笔试题中,80%的时候遇到过。
第四题
在gcc环境下,已知数组int arr[5]={1,2,3,4,5};则*(*(&arr+1)-1)的结果是什么?
答案:5。
知识背景:
如果想要获取某个变量的地址,可以使用取址运算符&,如果想要获取某个指针变量指向的数据,可以使用取值运算符*。
取址运算符&和取值运算符*在实际开发中几乎天天能够遇到,一定要重视!
第五题
请指出下列代码有几处错误?
答案:4处,修改后如下所示:
line12 class B1:public A
line24 delete[] _s;
line43 };
line46 A *a1 = new B1();
知识背景:
line12:继承语法错误,A后面不应该带括号。
line24:删除数组语法错误,中括号应该在数组变量前边。
line43:类定义语法错误,大括号后应该以分号结束。
line46:未定义错误。
都是一些基础的语法常识,一方面练眼力,一方面检验自己的实际编码能力。
怎么样?总共答对了几个?欢迎评论留言呦!
如果你想更好的提升你的编程能力,学好C语言C++编程!弯道超车,快人一步!笔者这里或许可以帮到你~
推荐一个学C语言/C++的学习裙【 七一九,二二一,三二八 】,学习群里面大家可以一起相互交流学习!
也会分享(源码、项目实战视频、项目笔记,基础入门教程)
欢迎转行和学习编程的伙伴,利用更多的资料学习成长比自己琢磨更快哦!
原文来源于https://blog.csdn.net/liuzehn/article/details/116357715?utm_medium=distribute.pc_feed.none-task-blog-yuanlijihua_tag_v1-2.nonecase&depth_1-utm_source=distribute.pc_feed.none-task-blog-yuanlijihua_tag_v1-2.nonecase