C++

  1. const的作用?
    const修饰的变量为常量,只可读
    const可以修饰参数和成员函数,修饰成员函数可以保证类的成员变量的值不会被修改
class A
{
    public :
      int value;
      void fun() const {
          int data = 1;
          data++; // 可以修改
          value++; // 错误,无法修改
      }


}
  1. 指针和引用的区别
    指针是一个变量,存放的是一个变量的地址,引用是一个变量的别名
    引用只能在初始化时被赋值,不能被改变,指针的值可以在任何时候被改变
    引用不能为NULL,指针可以为NULL
    引用不能被修改,而指针可以(看到的修改是把原变量的值行的修改了)

  2. malloc/free, new/delete的不同
    malloc/free是c++/c的库函数,而new/delete是c++的运算符。他们的作用都是动态申请内存和释放内存。
    new可以动态申请空间及初始化,delete可以释放空间。malloc/free无法执行构造函数和析构函数。

  3. 计算机中堆和栈的区别(不是数据结构中的堆栈)
    堆区的空间是手动分配的(new出来的)和释放的, 栈区的空间是系统自动分配和释放
    堆区存放的手动分配的变量
    栈区存放的是局部变量,参数变量
    扩展
    全局区(静态存储区static)存放的是全局变量和静态变量
    文字常量区存放的是常量字符串
    程序代码区存放函数的二进制代码

  4. 不调用C/C++ 的字符串库函数,编写strcpy

char * strcpy(char * strDest,const char * strSrc) {
          if ((strDest==NULL)||strSrc==NULL))                     
              return NULL;    
          char * strDestCopy=strDest; 
          while ((*strDest++=*strSrc++)!='\0'); 
          *strDest = '\0';
          return strDestCopy;
}
  1. static的作用
    static修饰的变量为静态变量,静态变量只初始化一次,若不赋值,默认值为0
    static修饰成员变量,类的所有对象共享
    static修饰成员函数,调用时可直接使用函数名,静态函数里无this指针(this指针是本身这个对象),静态成员函数(理论上)只能访问静态变量

  2. 头文件种的ifndef/define/endif 的作用
    防止头文件被重复包含

  3. 进程和线程的区别
    线程是调度和分派的基本单位,进程是拥有资源的基本单位
    进程拥有资源,而线程不拥有资源但可以访问隶属于进程内的资源
    在创建进程时,系统要为进程申请和释放资源,导致系统的开销明显大于创建线程时的系统开销

  4. 进程中的通信方式
    管道系统,共享存储系统, 消息传递系统

  5. c和c++的区别
    c采用的是面向过程的思想,重点在算法和数据结构,c++是面向对象的的思想
    是c的超集,c++还具有封装,继承,多态

  6. 什么是内存泄漏
    内存泄漏指的是手动分配空间使用完之后,没有释放空间

  7. 什么是野指针
    野指针不是NULL指针,是指指向“垃圾”内存的指针。即指针指向的内容是不确定的。
    产生的原因:定义后没有初始化或者指针释放之后没有设为NULL

  8. 构造函数和析构函数的执行顺序
    构造函数
    1). 首先调用父类的构造函数;
    2). 调用成员变量的构造函数;
    3). 调用类自身的构造函数。
    析构函数–与析构函数完全相反

  9. 为什么析构函数必须是虚函数?
    父类的指针指向子类的对象时,当释放基类指针时,如果不是虚析构函数就无法释放掉子类对象的内存空间,防止内存释放

  10. map和set有什么区别,分别又是怎么实现的?
    map和set都是C++的关联容器,其底层实现都是红黑树(RB-Tree)。

  11. C++中struct和class的区别?
    在C++中,可以用struct和class定义类,都可以继承。区别在于:struct的默认继承权限和默认访问权限是public,而class的默认继承权限和默认访问权限是private。

  12. 一个C++源文件从文本到可执行文件经历的过程?
    预处理->编译->汇编->链接
    预处理阶段:对源代码文件中文件包含关系(头文件)、预编译语句(宏定义)进行分析和替换,生成预编译文件。
    编译阶段:将经过预处理后的预编译文件转换成特定汇编代码,生成汇编文件
    汇编阶段:将编译阶段生成的汇编文件转化成机器码,生成可重定位目标文件
    链接阶段:将多个目标文件及所需要的库连接成最终的可执行目标文件

  13. 变量的声明和定义有什么区别?
    声明变量不分配空间,定义变量要分配空间。声明主要是告诉编译器,后面的引用都按声明的格式。定义其实包含了声明的意思,同时要分配内存空间。

  14. 在C++程序中调用被C编译器编译后的函数,为什么要加extern"C"?
    C++语言支持函数重载,C语言不支持函数重载。

  15. 虚函数的作用是什么?
    多态:调用同一个函数名,可以根据需要但实现不同的功能。
    主要是运行时多态。
    若要访问派生类中相同名字的函数,必须将基类中同名函数定义为虚函数,这样,将不同的派生类对象的地址赋值给基类指针变量后,就可以动态的调用不同类中的函数。
    在派生类中重新定义基类中的虚函数时,可以不用关键字virtual来修饰这个成员函数。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值