前几天在准备实习的时候,开始准备面试,刷起了数据结构。同时也准备了一些常见的面试题(C++)
但是这些题目大部分是从网上归纳总结的,同时也是自己认为比较精辟的。
一、面向对象的理解:
面向对象是一种软件设计方法,在开发的过程中,把事物抽象成对象,把事物的关系抽象成类、继承等。这种设计方法相对面向过程的方法更容易令人理解。同时在设计大型的复杂的系统,更容易进行拓展和维护。
二、引用和指针的异同:
同:都是地址的概念(把引用、指针作为参数可以在全局里改变参数的值)
异:指针是一个实体,引用仅仅是别名;
引用只可以初始化一次,之后不可变;指针可以重复赋值。
引用不能为空,而指针可以为空值
三、全局变量和局部变量在内存中有什么区别
全部变量存储在静态数据区,而局部变量存储在堆栈中
四、C++函数中值的传递方式:
值传递、指针传递、引用传递
五、#define和const的区别
#define是C语法中用来定义符号常量的方法,在编译阶段符号就会被值替换,可以用来定义常量,也可以用来定义短小函数。被define的符号并没有类型。
Const的是C++中定义常变量的方法,它可以使变量不变,但它还是一个变量,从而具有变量的特性,它具有类型。内存中存在以它命名的存储单元,可以用sizeof测出长度。
五、全局变量的优缺点:
便于数据共享,不变管理,容易引发意想不到的错误。
六、多态的理解
顾名思义:多种状态,相当于接口的不同实现方式。C++中通过虚函数的函数重载来实现。父类指针可以指向子类对象,一个函数在不同的子类有不同的实现方式。在编程实现某些功能的时候,把不同的子类对象当成父类来看,暂时屏蔽不同子类对象之间的差异,写出通用的代码,来适应需求的不断变化。一个父类指针根据当前赋值给他的不同的子类对象,来完成一些差异化的功能。
七、内存的分配方式
1、 静态存储区:这块内存在程序编译的时候已经分配好,在整个程序整个运行期间都存在。如:全局变量、static变量
2、 在栈上创建:在执行函数的时候,函数内部的的存储单元都可以在栈上创建,当函数执行结束的时候这些存储单元被释放。
3、 从堆上分配:动态内存分配。动态内存的生存周期由程序员决定(使用new或者malloc()生成,使用delete或者free()释放)如果在堆上分配了空间,就有责任回收他。频繁的申请和释放不同大小的内存块将会产生堆内碎块。
八、new和malloc()的区别;delete和free()的区别
new、delete的malloc()和free()的最主要区别是new、delete是运算符,而malloc和free是函数。对于非内部数据对象而言,malloc/free无法满足动态对象的要求。而new和delete会自动调用该对象的构造函数、析构函数。