zoukankan      html  css  js  c++  java
  • C++面试题

    1.头文件中的ifndef/define/endif有什么作用?

    答:这是C++中的预编译头文件的保护符,防止头文件被重复编译。

    2.#include<file.h>和#include"file.h"有什么区别?

    答:前者是从标准库路径下搜索和引用,后者是从当前工作路径下搜索和引用。

    3.评价一下C/C++各自的特点?

    答:C语言是一种结构化语言,面向过程,基于算法和数据结构,所考虑的是如何通过一个过程或函数从输入得到输出。

         C++是面向对象,基于类,对象和继承,所考虑的是如何构造一个对象模型,让这个模型能契合与之对应的问题,通过获取对象的状态信息得到输出或实现过程控制。

    4.const有什么用途?

    答:在C/C++中,(1)可以定义const常量 (2)修饰函数的返回值和形参

        在C++中,还可以修饰函数的定义体,定义类的const成员函数。被const修饰的东西收到强制保护,可以预防意外的变动,提高程序的健壮性。

    5.const和#defind有什么区别?

    答:const和#define都可以定义常量,但const用途更广。

          const常量有数据类型,而宏常量没有数据类型。编译器可以对前者进行类型安全检查,而对后者只进行字符替换,没有类型安全检查,并且在字符替换时可能产生意想不到的错误。

          有些集成化的调试工具可以对const常量进行调试,但不能对宏常量进行调试。

    6.指针和引用的区别?

     答:指针和引用都提供了间接操作对象的功能。

           (1)指针定义的时候可以不初始化,而引用定义的时候就要初始化,和一个对象绑定,而且一经绑定,只要引用存在,就一直保持和该对象的绑定。

           (2)赋值行为的差异:指针的赋值是将指针重新指向另一个对象,引用的赋值是修改对象本身。

           (3)指针存在类型转换,而引用分const引用和非const引用,非const引用只能与同类型的对象绑定,const引用可以绑定到不同但相关类型的对象或右值。

    7.在C++程序中调用被C编译器编译后的函数,为什么要加extern"C"?

    答:C++支持函数重载,而C语言不支持,函数被C++编译后在符号库中的名字与C语言不同。extern"C"的目的是解决名字匹配问题,实现C和C++混合编程。

    8.sizeof和strlen的区别?

    答:(1)sizeof的返回值类型是size_t。

          (2)sizeof是运算符,而strlen是函数。

          (3)sizeof可以用类型做参数,其类型可以是任何类型的或者是变量、函数,而strlen的参数只能用char*作参数,而且必须是以''结尾。

          (4)数组作sizeof的参数是不会退化为指针,而传递给strlen就退化为指针。

          (5)sizeof是编译时的常量,而strlen是运行时才计算出来的,且是字符串中字符的个数而不是内存大小。

    9.C++中有malloc/free,为什么还有new/delete?

    答:malloc/free是C/C++标准库中的函数,而new/delete是C++中的运算符。他们都可以用来动态申请和释放内存。

         对于内置类型而言,二者没多大区别。malloc申请内存时,要指定分配内存的字节数,而且不会做初始化;new申请的时候默认有初始化,同时可以指定初始化。

         对于类类型而言,malloc/free是无法满足要求的。对象在创建的时候要自动执行构造函数,消亡之前要执行析构函数。由于malloc/free是库函数而不是运算符,不再编译器控制之内,不能把执行构造函数和析构函数的任务强加给它,所以C++还需要new/delete。

  • 相关阅读:
    容易遗忘的配置
    linux中启动Zookeeper
    Linux中设置静态ip地址
    IDEA中工程上传到SVN
    Invalid bound statement(not found):cn.e3mall.mapper.TbItemMapper.selectByExample.....
    获取不到jdbc.driver的值解决办法
    idea中applicationContext-trans.xml中的Cannot resolve bean 'dataSource'...的问题解决
    idea中applicationContext-dao.xml文件中Cannot resolve file***** :spring xml model validation问题
    如何在IDEA中导入一个普通的java工程
    Navicate for mysql如何导入一个sql文件
  • 原文地址:https://www.cnblogs.com/ling-mo/p/4460763.html
Copyright © 2011-2022 走看看