c++面试宝典

1、整形有哪几种类型?

整型主要表示整数、字符和布尔值的算法类型的合称,整形根据修饰符可细分为13种形式,它们的区分主要体现在类型名、长度和表示范围等几个方面。

2、C++中有哪些常量?

常量也称为常数,它是一种恒定不变的数值或者数据项,按照数据类型可主要分为整型常量、浮点型常量、字符型常量、字符串常量、转义字符常量、地址常量等6种。

3、常量和变量的区别?

常量是不能够改变的量,变量是可以改变值的量,常量在定义时必须初始化,变量可以不再定义的时候初始化,常量不可用寻址,它的地址不能够赋给非常量指针,变量可以寻址。常量有相对较高的编译执行效率。

4、操作符有哪些分类?

表达式由操作符、操作数和标点符号组成的序列,目的是为了说明一个运算过程,操作符说明了表达式的主要目的,并且计算返回的结果。

按功能可区分操作为算术操作符、关系操作符、逻辑操作符、位操作符、赋值操作符、自增和自减操作符、箭头操作符、条件操作符、sizeof操作符、逗号操作符等10大类。

按照操作数可分为一元操作符、二元操作符、三元操作符。

5、操作符优先级对运算结果有什么影响?

优先级决定了表达式的运算顺序,不同的优先级运算符的不同会影响表达式的运算结果。

6、逻辑操作与其他操作的关系?

逻辑操作只返回true或false两种值,可以用它来作为判断条件,逻辑操作符不会改变被操作数的值。

7、自增自减前后操作的区别?

前自增减的操作优先级大于赋值运算符,而后自增减的操作优先级小于赋值运算符,后自增减操作后表达式的值不会发生改变。

8、指针自增减有什么不同?

变量的自增自减修改的是变量的值,指针的自增减修改的是指针的指向地址。

9、什么是左值和右值?

 变量是左值,可以出现在赋值语句的左边。数字字面值是右值,不能被赋值。

10、什么是变量?

变量是指在程序运行过程中随时可以发生变化的量,变量是在电脑内存里可以修改的,存在值的命名空间。

11、变量有哪几种初始化方式?

变量的初始化是指创建变量并同给它赋初值,赋值则是擦除对象的当前值并用新值代替。其中,直接初始化的语法更加灵活而且执行效率更高。(复制初始化和直接初始化)

12、变量默认初始化有什么规则?

系统有时会自动帮助编程者初始化为初始化的变量。使用未初始化的变量是常见的程序错误,但通常很难发现这类的错误,有时会导致程序员在程序运行时发成问题而难以判断出错误。所以,建议每个内置类型的对象都要初始化。虽然这样并不是完全需要的,但是会让程序更加安全。

13、什么是变量的声明和定义?

C++程序当中由许多文件组成,为了让多个文件访问相同的变量,C++区分了声明和定义。定义和声明有相同的时候,但是声明的主要目的是表明变量的类型和名称,而定义主要目的是为变量分配存储空间。

14、C++有哪几种作用域?

作用域是程序的一段区域,作用域用于区别变量名的不同有效范围,分为全局作用域、局部作用域和语句作用域。一个变量名可以和不同作用域的不同实体相关联(不同作用域可以有相同名称但功能不同的变量定义或者声明)。

15、局部变量和嵌套的作用域?

局部变量就是具有局部作用域的变量。在C++中,作用域是可以嵌套的。

16、变量有哪几种存储类型?

C++中变量的存储类型可分为自动类型、寄存器类型、静态类型、外部类型等4种。

17、什么是引用?

引用时对象的另一个名字,在实际程序中,引用主要作函数的形式参数来使用。

18、如何使用const引用和非const引用?

const引用可以读取但是不可修改引用对象,任何const引用进行赋值都是不合法的,它适用于指向const对象的引用,而非const的引用不适用于指向const对象的引用,可以修改引用和被引用对象的值。

19、C与C++的区别?

C预言师结构化的编程语言,是面向过程的,C语言编程考虑的是实现过程。C++是面向对形象的,C++考虑的是整个程序模型,它有更严格的数据类型检测,C++保留了C语言的优势,同时增加了面向对象的机制,c++增加了一些关键字和几种类型的变量,C++和c函数的参数规定有所不同,参数的格式和变量的作用域不同,引用的使用不同等等。

20、什么是匈牙利命名法?

匈牙利命名法使用中编程时的命名规范。主要思想是在变量和函数名中加入前缀以增进人们对程序的理解。

21、变量有什么命名规则?

变量命名习惯最重要的是保持风格一致,变量名由字母、数字和下划线组成并且需以字母或下划线开头,变量名不可与保留关键字和标准库冲突。

22、条件语句有哪几种?

 三种:if、if...else、if...else if...else...

23、条件语句如何嵌套?如何匹配else?

条件语句可在不同的执行语句作用域内进行嵌套,else子句通过{}来划分作用域实现匹配。

24、for循环的计算顺序是什么?

  for语句执行顺序是先从左至右执行循环条件语句,如果循环条件语句的判断语句为true则在循环条件语句执行后继续执行一次循环执行语句,然后再回到循环条件语句,如果判断条件为false则停止循环。

25、什么是递归?

一个过程或函数直接或者间接调用自己本身,这种过程或函数叫递归过程或者递归函数。

汉诺塔问题是程序设计中经典的递归问题。它可以形象的解释递归算法的调用。

26、什么是表中输入输出流?

标准输入流是从标准输入设备流向程序的数据,标准输出流是流向标准输出设备的数据,如显示器。

27、如何重载输入输出?

重载在相同范围中为给定一个函数名称提供了多种定义。委托编译器依据调用该函数的参量选择合适的函数或运算符版本。重载可以为输入输出提供更加简洁的代码。

27、文件的输入输出有哪几种方式?

C++定义了ifstream、ofstream和fstream3种类型用来支持文件的输入输出。

28、什么是异常?

异常是程序运行时出现的不正常,其可能会导致系统无法正常运行甚至停止运行等严重情况,程序员需要实现好异常的处理来保证程序的稳定性。

系统通过try块和异常处理构成了异常机制,通过该catch语句来捕捉运行时的异常,并且执行异常处理,通过throw语句可以抛出异常。

29、宏定义和操作符的区别?

宏展开是用宏定义时设计的宏体去代替宏指令名,并且用实际参数一一取代形式参数。

30 include有哪几种方式?

标准头文件在系统文件目录下查找,用户自定义文件会依次在用户目录的C++安装目录和系统文件中查找。

31、如何分配和释放空间?

    new/delete用于分配和释放单个变量的空间。new[]/delete[]用于分配连续多变量的空间。

32 变量大小?

各个类型的变量长度由编译器来决定(实际上与操作系统位数和编译器都有关)使用时可用sizeof()得到,当前主流编译器一般是32位或64位。

  类型      32位  64位

  char      1    1

  short int    2    2

  int       4    4

  long int     4    8

  long long int  8    8

  char*       4    8

  float       4    4

  double      8    8

33、虚函数的纯虚函数的区别?

纯虚函数是虚函数的一个子集,用于抽象类,含有纯虚函数的类就是抽象类,它不能生成对象。

34、如何使用纯虚函数?

纯虚函数用来定义没有意义的实现,用于抽象类中需要交给派生类具体实现的方法。

35、什么是指针?

指针用来存储内存地址的变量,指向单个对象的地址,除了void指针类型外,指针的数据类型与所指地址变量数据类型必须保持一致。

36、如何初始化指针并对其赋值?

初始化指针就是给指针赋初值,&符号可以用来获取对象的内存地址,并且赋值给指针变量。指针变量的初始化和赋值都可以通过运算符"="来实现。

37、const指针和指针指向const

    const指针的值不能修改,但修改它所指对象的值,指针所指对象的值能否修改完全取决于该对象的类型,而指向const变量的指针不可用修改指向const变量的值,但是自身可以被重新赋值。

38、数组指针和指针数组的区别

数组指针是一个指正变量,指向一个数组,而指针数组时一个只包含指针元素的数组。它的元素可以指向相同类型的不同对象。

39、什么是函数指针?如何使用函数指针?

函数指针就是指向函数的值存储空间地址的指针。可以对函数指针进行赋值并通过函数指针来调用函数。

40、指针函数和函数指针的区别?

函数指针是一个指向函数的指针。本质是一个指针,而指针函数只是说明它是一个返回值而指针的函数,它本质是一个函数。

41、this指针

调用成员函数时,编译器会隐含的插入一个参数,这个参数是this指针,this指针指向当前对象本身,表示当前对象的地址。

42、引用与值传递的区别?

值传递将传递的值作为一个副本传递,在函数调用时,实参把它的值传递给对应的形参,方法执行中形参值改变不影响实参,实参的值不会发生改变。

而引用传递的是引用对象的地址,函数对形参操作会影响实参的值,实参的值会随着形参值的 改变而改变。

43、指针和引用的区别?

指针是一个实体,引用是一个别名

引用使用时无需*解引用,指针则需要解引用

引用只能在定义时被初始化一次,之后不可改变,而指针可以改变

引用没有const 指针有const

引用不能为空,指针可以有

sizeof引用得到指向的变量的大小,sizeof指针得到的是指针本身的大小;

自增减的意义不一样

在内存分配上指针需要分配内存空间,引用不需要。

44、面向对象和面向过程的区别?

面向过程是一种以过程为中心的编程思想,以算法为驱动。面向对象是一种以对象为中心的编程思想,以消息进行驱动。面向过程编程语言的组成为程序=算法+数据,面向对象的编程语言组成为:程序=对象+消息;

45、面向对象的特征是什么?

封装、继承和多态,面向对象中的所有对象都可以归属为一个类。

46类和结构有什么区别?

实例化类存储咋内存的堆里,而结构存储在栈里,结构执行效率相对较高,结构没有析构函数,结构不可用继承。一般来说结构用来处理较少的程序基础数据,类用来处理复杂逻辑。

47、抽象类及用途

包含纯虚函数的类称为抽象类。抽象类把所有共同属性或方法的对象抽象成一个类。

48、成员变量有哪些访问控制方式:

 private protect public 三种访问权限对成员变量进行访问控制。

49、如何访问静态成员?

静态成员可独立访问,不需创建类的实例,不能用实例来进行调用。类的静态方法只能访问类的静态成员。

50、什么是多态?

多态是面向对象编程的核心概念之一,多态技术允许将父类设置成一和它的一个或多个子对象相等。

51、c++如何实现多态?

多态有动态多态、静态多态、函数多态和宏多态等。编程者常说的多态是指动态多态,它是基于继承机制和虚函数来实现的。

52、派生类和基类

派生类总是可以转换为基类的引用类型。基类转换为派生类需要咋确定安全的情况下使用强制转换来进行转换。

53、什么是虚成员,有什么作用?

虚函数的作用是实现动态联编,当程序发现虚函数名前面的关键字virtual后,会自动将其作为动态联编处理,即在程序运行时动态地选择合适的成员函数。

54、构造函数与析构函数的调用

构造函数和析构函数的调用是自动进行的,建立对象时会调用构造函数,销毁对象时会调用析构函数。

55、有哪几种继承方式?

公有继承public 保护继承 protected 和私有继承private

56、什么时候发生函数覆盖

覆盖在继承派生类对于抽象类或者接口声明的方法具体实现时使用。

57、如何访问基类成员?

派生类中的成员函数可直接访问基类中的public和protected成员,但不能访问基类的private成员。通过派生类的对象只能访问基类的public成员。

58什么是深复制和浅赋值?

如果一个类拥有资源,当这个类的对象发生复制过程时候,这个过程可以叫做深复制,如果对象存在资源但赋值过程中并未赋值资源的就是浅复制。

59、什么是复制构造函数?

又称拷贝构造函数,复制函数有3中情况会发生:1当一个对象以值传递的方式进入函数体,2一个对象以值传递的方式从函数返回,3一个对象需要通过另一个对象进行初始化。

60、什么是类型转换构造函数?

一个类的构造函数只有一个参数,而这个参数不是该类的类型而是其他类型,这个构造函数就被称为类型转换构造函数,转换构造函数可以用来处理不同域的同一个数据值。

61 函数

 函数由函数名、参数、返回值类型以及一组包含操作语句的语句块组成,函数可以支持重载,程序就是由函数组成。

63形参和实参有啥区别?

形参是函数定义或声明时的函数形式参数,形参表制定了函数参数的个数和数据类型,实参是函数调用时传递给函数的参数,传递时要与形参一一对应。

64、c++支持参数不确定函数吗?

c++可通过隐藏参数机制类支持参数个数不确定函数。

65、什么是内联函数?

在类声明的内部声明或定义的成员函数叫做内联函数。

66、引用形参和非引用形参的区别?

引用形参是将参数用参数变量的地址来进行传递,可修改通过函数对形参的调用来修改实参的值。

67、指针形参和引用形参的区别?

指针形参是指函数的参数是指针,不会像引用形参那样通过函数调用影响实参的值,但是调用后它会修改实参的对象。程序中建议尽量少使用指针形参,这样会使程序可读性下降。

68、一个类可以访问另一个类的私有成员吗?

外部类可以使用宏定义等特殊的方法来实现访问类的私有成员。

69、函数重载,如何进行函数重载的匹配

编译器遇到重载函数的调用时,必须确定调用哪个函数,如果没有找到参数完全匹配的函数,则找一个替代函数。此时编译器将实参和所有重载函数的参数做比较,这一过程称为参数匹配。

70、重载时如何实现实参的类型转换?

在函数重载匹配时,先通过标准转换来实现匹配,再通过类类型转换来实现匹配。

71、什么是函数模板?

函数模板技术是指使用了模板技术定义了参数化类型的非成员函数,这使得程序能够使用不同参数类型调用相同的函数。

72、什么是类模板?

类模板是使用模板技术的类,描述了能够管理其他数据类型的通用数据类型,类模板技术通常用于建立包含其他类型的容器类,例如队列、链表和堆栈等。

73、什么是容器?

容器是容纳特定类型对象的集合,在stl中有顺序容器和关联容器两种。

74、有哪几种容器?

顺序容器有:

 vector、deque、list、

75、什么是泛型编程?

c++中泛型编程时通过模板技术来实现的,主要是设计函数模板和类模板

76、如何对树进行遍历?

树的遍历有深度优先遍历和广度优先遍历两种方法


  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值