2018.07.19残问题

1,.h文件重复包含会怎样?

有三个文件a.h, b.h, mian.c; b.h包含了a.h;mian.c包含了a.h和b.h;如果a.h里有定义全局变量int a = 1;编译会报错a重复定义,如果a未初始化则正常;如果a.h有函数体,编译会报错,函数已存在;如果a.h再包含b.h会提示包含自身,编译报错,递归深度超过1024.

2,STL 智能指针

3,交叉编译:在一个平台上生成另一个平台上的可执行代码

4,为什么要使用cgwin来仿真linux不直接在Linux下开发?

烧文件到车载机?rom;嵌入式;

5,堆和栈的区别

6,free与delete的区别

 free 只是告诉操作系统回收内存,而delete会先调用类的析构函数,然后才告诉操作系统回收内存;free是运算符,delete是函数
对于非内部数据类型的对象而言,光用maloc/free无法满足动态对象的要求。
malloc与free是C++/C语言的标准库函数,new/delete是C++的运算符。它们都可用于申请动态内存和释放内存。
对于非内部数据类型的对象而言,光用maloc/free无法满足动态对象的要求。对象在创建的同时要自动执行构造函数,对象在消亡之前要自动执行析构函数。由于malloc/free是库函数而不是运算符,不在编译器控制权限之内,不能够把执行构造函数和析构函数的任务强加于malloc/free。因此C++语言需要一个能完成动态内存分配和初始化工作的运算符new,以及一个能完成清理与释放内存工作的运算符delete。注意new/delete不是库函数。
delete [] 和delete本质的区别是,前者会调用n次析构函数,为每的new出来的对象释构,后者只调用一次

char* p=new char[100];
delete p; //不需要delete[] p;因为没有释构的需要

aClass* p=new aClass[100];
delete[] p;//必须delete[] ,如果没有[],p指向的内存同样会被释放,但是,释构函数只被调用一次,而不是100次

7,多态的几种实现

静态多态:重载、模板;是在编译的时候,就确定调用函数的类型。

动态多态:函数覆盖;虚函数。

运行的时候,才确定调用的是哪个函数,动态绑定。运行基类指针指向派生类的对象,并调用派生类的函数。

虚函数实现原理:虚函数表和虚函数指针。

必须在子类中覆盖基类中的纯虚函数。

多态就是同一个接口,使用不同的实例而执行不同操作;包含纯虚函数的类不能定义其对象,而包含虚函数的则可以

猜你喜欢

转载自blog.csdn.net/qinglongqishi1/article/details/81124326