c/c++常见面试题(一)

来源:互联网 发布:成都指尖银河网络 编辑:程序博客网 时间:2024/04/28 02:43

1.c++的三大特性是什么?说说你对面向过程和面向对象的理解?
三大特性是:封装,继承,多态。
面向过程:倾向于做一件事的流程,先做什么,然后做什么,最后做什么。更接近与计算机的实际计算模型
面向对象:倾向于建立一个对象模型,他能够近似的反应实体与实体之间的关系。它具有封装,继承,多态三大特点,更好的提高的代码的安全性和效率。
2.什么是函数重载?c语言为什么不支持?在c语言中如果调用c++函数怎么处理?在c++中如果调用c函数怎么处理?
函数重载的定义:函数名相同,参数列表不同(参数个数不同,参数类型不同)
因为c语言在解析任何函数时,会将函数名解析为_函数名的格式,所以在调用时会产生二义性,所以c语言不支持
在c中调用c++函数时,在c++函数实现的文件前面加extern “C”,那样的话,c++对函数的解析将会用c的解析方式进行处理。
在c++中调用函数时,我们要在主函数的文件前面加上extern “C”,这样就告诉编译器,在进行函数调用时,用c风格的函数名进行查找
3.谈谈指针和引用的理解?他们有什么不同
相同点:都是地址的概念。指针指向一块内存,它的内容是指内存的地址;引用是某个内存的别名
区别

1. 指针是一个实体,而引用仅仅是一个别名2. 引用使用时无需进行解引用,而指针需要3. 引用只能被初始化一次(从一而终),而指针可以随时改变4. 引用不能为空,指针可以为空5. 计算sizeof大小时的意义不同,引用得到的是所指变量(对象)的大小,而指针得到的是指针本身6. 指针和引用的自增,自减不同7. 从内存分配来看,指针需要分配实际的内存,而引用不需要分配内存

4.c语言和c++中static有什么区别?c++中static和class有什么区别?
static有三种作用:

1. 修饰静态局部变量2. 修饰全局变量和函数3. 修饰类的成员 c/c++前两种的作用都都相同,只是c++多了第三种,所以第三中就是c/c++static的区别      第三种函数为:表示一个类所共同拥有的成员,而不是某个对象所特有的。这也是也普通成员的最大区别。普通成员函数在调用时,需要传入this指针,而static成员函数在调用时,没有this指针。

5.什么结构体内存对齐?为什么要进行结构对齐?可以进行3字节的结构对齐吗?
内存对齐是指: 在访问特定变量的时候经常在特定的内存地址访问,这就需要各类型数据按照一定的规则在空间上排列,而不是顺序的一个接一个的排放,这就是对齐。
原因:数据结构应该尽可能地在自然边界上对齐,是为了访问未对齐的内存,处理器需要做两次内存访问,而对齐的内存仅需要一次的访问。
理论上可以的,实际上我们不能这么做,这样做在读取数据时,要对内存进行2次的访问,效率将会直线下降。
6.什么是结构体,一般在什么情况使用?
结构体(struct)指的是一种数据结构,是C语言中聚合数据类型(aggregate data type)的一类。结构体可以被声明为变量、指针或数组等,用以实现较复杂的数据结构。结构体同时也是一些元素的集合,这些元素称为结构体的成员(member),且这些成员可以为不同的类型,成员一般用名字访问。
需要将不同数据类型封装在一起的时候或者,数据类型比较多的时候可以使用结构体,它的使用可以提高程序的效率。
7.如何知道结构体的某一成员相对于结构体起始位置的偏移量?
使用offsetof函数
函数的声明:size_t offsetof(structName memberName);
第一个参数为函数名,第二个参数是结构体成员名
8.什么是大小端?举个使用场景?如何测试你计算的大小端?
当内存的低地址存放着数据的高位时,为大端对齐; 当内存的低地址存放着数据的地位时,为小端对齐。
用一个联合体测试

int test(){union A{     int a;     char b;}a;     a.a=0x1234     if(a.b==1)     {          return 0;   //大端对齐     }     return 1;        //小端对齐}

9.空类的大小是多少?为什么?
空类的大小为1。如果有多个类的对象时,并且把空类的大小设置为0时,那么就无法正确访问这些类,因为他们占有相同的起始位置,会出现访问的二义性。如果把类的成员设置为>1的大小。那么就会造成空间浪费。所以设置为1最为合适
10.在类外如何访问类中的私有成员变量?

1. get/set接口  (在类内创建一个public的函数)2. 友元函数3. 友元类
原创粉丝点击