C++笔试面试题收录

Posted shutong-jiuke

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了C++笔试面试题收录相关的知识,希望对你有一定的参考价值。

1.c和c++中struct有什么区别?
    ①.c中没有保护权限,不能定义函数,但可以有函数指针。
    ②.c++中有保护权限默认是private,可以定义函数。
2.c++中的struct和class有什么区别?
    ①.继承权限不同:struct 按照public权限继承而class按照private权限继承。
    ②.成员的默认访问权限不同:class的成员默认是private权限,struct的成员默认是public。
3.引用和指针有什么区别?
    ①.通过指针变量操作指针指向的目标属于间接操作。
    ②.引用本身就是目标变量的别名,对引用的操作就是操作目标本身。
    ③.引用在定义时必须初始化,而且绑定对象后不能更改。指针则不必。
    ④.不存在空的引用。但可以存在指向空值的指针。
4.c++中值得传递方式有几种?
    ①.值传递
    ②.地址传递
    ③.引用传递
5.什么是内联函数,应用什么实现?
    ①.内联函数(就是对于一个频繁使用的短小函数)用关键字inline(内联函数要做参数类型检查)
    ②.c中使用宏定义(宏是原样替换,不做类型检查),
    ③.宏定义和内联函数存在本质的区别,转换的时候应考虑是否转换后功能是否正常。
6.c++中virtual 与inline的含义分别是什么?
    ①.virtual 关键字,类成员函数声明前加virtual关键字修饰,则该成员函数为虚函数。
    ②.inline 关键字,在函数定义前加inline修饰,则该函数为内联函数。
    note:inline 是一种用于实现的关键字,而不是用于声明的关键字。
7.函数assert的用法?
    ①.assert为断言。仅在Debug版本起作用,用于检查不该发生的情况。
      当值为假时,现向stderr打印一条出错信息。然后调用abort终止程序。
8.const 与 #define比较,有什么优点?
    ①.宏常量没有数据类型而const有数据类型,编译器可对其进行类型安全检查。
    ②.有些调试工具可以对const常量调试,而不能对宏常量调试。
9.malloc/free 与 new/delete的区别?
    ①.malloc/free是c++标准库函数,new/delete是c++的运算符。二者都可以动态申请内存和释放内存
    ②.malloc/free无法满足动态对象的要求,即构造函数与析构函数的自动执行。所以出现了new/delete
    note:new/delete 不是库函数。
10.c++是不是类型安全的?
    ①.不是,不同类型可以进行强制转换。
11.c++中const关键字?
    ①.const修饰变量: 该变量为只读变量,const变量必须初始化。
    ②.const修饰指针:
        1)修饰指针指向的变量:指针指向的变量为只读变量,不能通过指针修改变量的值,但可以改变指针的指向。
            eg: const int *p;
        2)修饰指针本身:即该指针为常量型指针,不能修改其指向,可以通过指针修改指向变量的值
            eg:int * const p;
    ③.const 修饰形参变量:函数内部不能够改变这个参数的值。
    ④.const 修饰返回值:主要用于函数返回const引用,不能够通过函数返回的引用对实际对象进行任何修改。
11.c++中static关键字?
    ①.修饰全局变量:限制该变量作用域。只能作用域本文件,即使其他文件用extren声明也不可以。
    ②.修饰局部变量:延长变量生命周期到程序结束。
    ③.修饰函数:限制作用域,只能作用域本文件,即使其他文件用extren声明也不可以。
    ④.修饰类成员函数.该成员函数为静态成员函数,没有this指针,它仅能访问类的静态数据和静态成员函数。
    ⑤.对于类的成员函数,有时候必须指定其返回值为const类型,以使得其返回值不为“左值”。
12. 什么是多态?
    ①.定义:“一个接口,多种方法”,程序在运行时才决定调用的函数。
    ②.实现:多态主要通过虚函数实现。
    ③.目的:接口重用。
    ④.用法:声明基类指针,利用该指针指向任意一个子类对象,调用相应的虚函数,可以根据指向的子类的不同而实现不同的方法。
13.多态类中的虚函数表何时建立的?
    ①.虚函数表是在编译时建立的,各个虚拟函数这时被组织成了一个虚拟函数的入口地址的数组。
        虚表指针是在运行期,也就是构造函数被调用时进行初始化的。是实现多态的关键。
14.    sizeof一个空类的大小?
    ①.类的实例化是在内存中分配一块地址,每个实例在内存中都有独一无二的二地址。
        同样,空类也会实例化,所以编译器会给空类隐含的添加一个字节,这样空类实例化后就有独一无二的地址了。
        所以,空类的sizeof为1,而不是0.
15.内存分配指针的方式有几种?
    ①.从静态存储区分配:例如全局变量。程序结束释放。
    ②.栈区创建,局部变量等在函数执行结束自动释放。
    ③.堆区分配,即动态分配,又malloc或new 申请,free或delete释放,生存周期由程序员控制。
16.全局变量和局部变量的区别,编译器如何识别?
    ①.生命周期不同:
        全局变量随主程序的创建而创建,销毁而销毁。
        局部变量在局部函数内,函数结束就销毁。
    ②.编译器通过内存分配的位置识别,全局变量分配在全局数据段,局部变量分配在栈区。
17.Heap与Stack的差别?
    ①.Heap是堆,空间由程序员手动分配与释放。stack是栈,
    ②.stack是栈,空间由系统自动分配与释放。
18.c++中explicit关键字
    ①.explicit关键字用于修饰类的构造函数,表明该类的构造函数是显示,使用者必须显示调用。
19.    重复多次fclose一个打开过一次的FILE *fp指针会有什么结果?请解释。
    ①.导致文件描述符结构中的指针被重复释放,进而导致不可预期的异常。
20.面向对象的三个基本特征,并简单叙述。
    ①.封装:将客观事物抽象成类,每个类对自身的数据和方法实行保护(protect private public)
    ②.继承:广义上的继承有三种方式:
            1)实现继承(指的是使用基类的属性和方法而无需额外编码的能力)
            2)可视继承(子窗体使用父窗体的外观和实现代码)
            3)接口继承(仅使用属性和方法,实现滞后到子类实现。
            前两种(类继承)和后一种(对象组合=>接口继承以及纯虚函数)构成了功能复用的两种方式。
    ③.多态:是将父对象设置成为和一个或更多的与他的子对象相等的技术。
    父类指针可以根据子类对象的特性以不同的方式运作。简单说就是允许将子类类型的指针赋值个父类类型的指针。
    简而言之,就是接口重用。
21.多态的作用?
    ①.隐藏实现细节,是的代码能够模块化;扩展代码模块,实现代码重用。
    ②.接口重用:为了类在继承和派生的时候,保证使用家族中任一类实例的某一属性时的正确调用。
22.重载、覆盖、隐藏 的区别?
    ①.重载:同一个名字空间 允许存在函数名相同,参数列表不同。
    ②.覆盖:不同名字空间 用于继承,子类重新定义父类虚函数的方法
    ③.隐藏:不同名字空间 派生类与基类的函数同名,屏蔽基类的函数。
23.c++里面是不是所有的动作都是由main()函数引起的?
    ①.全局变量的初始化。
24.    析构函数的用法和作用?
    ①.析构函数是特殊的成员函数,没有返回类型,没有参数,在对象销毁时有系统自动调用。
    ②.析构函数可以被virtual修饰(构造函数不能virtual修饰,不存在虚构造)
25.c++中为什么用模板类?
    ①.编译时检查数据类型,保证类型安全。
    ②.具有很高的复用性,移植性
    ③.可用于创建动态增长和减小的数据结构。
26.字符指针、浮点数指针、以及函数指针这三种类型的变量哪个占用的内存最大?
    ①.32位系统下,不管是指向何种对象的指针变量都占4字节。
27.你是如何使用return语句的?
    ①.return语句不能返回指向 栈内存的指针或者引用。因为该内存会在函数结束时自动销毁。
    ②.需要明白我们需要返回的是指针还是引用。
28.delete 与 delete[]的区别?
    ①.delete只会调用一次析构函数,而delete[]会调用每一个成员的析构函数。
29.子类析构时要调用父类析构函数吗?
    ①.构造函数调用顺序:先调用父类构造函数,在调用子类构造函数。
    ②.析构函数调用顺序:先调用子类析构函数,在调用父类析构函数。
30.虚函数、纯虚函数?
    ①.虚函数:virtual关键字修饰,允许派生类对基类虚函数重新定义
    ②.纯虚函数:在基类中保留函数名字,派生类根据需要对它重新进行定义。拥有纯虚函数的类称为抽象类。抽象类不予许创建对象实例。





















































































































以上是关于C++笔试面试题收录的主要内容,如果未能解决你的问题,请参考以下文章

腾讯 C++ 笔试/面试题及答案

腾讯 C++ 笔试/面试题及答案

Java笔试面试题整理第一波

多线程笔试面试题汇总

java面试题笔试常见选择题大全含答案

可能碰到的iOS笔试面试题--C语言