1. 引用和指针的区别
相同点:引用和指针都是地址的概念。引用是一个内存对象的别名,指针指向内存对象,保存了这个对象的内存地址。
区别:(1)引用不能为空,指针可以为空
(2)引用必须初始化,指针不需要
(3)引用初始化以后不能改变,指针可以改变初始化对象后的值
(4)引用访问对象后是直接访问,指针访问对象是间接访问
(5)引用大小是所引用对象的大小,指针大小是指针类本身的大小
(6)引用没有const, 指针有const
(7)引用和指针的++运算符
(8)引用不需要分配内存空间,指针需要。
2. 虚函数实现的基本原理
每一个虚函数(无论本身还是继承而来)的类都至少有一个与之对应的虚函数表,其中放着该类所有虚函数对应的函数指针。
作用是实现了多态的机制,父类指针调用实际子类的成员函数。可以让父类的指针有多种形态(实现多态所必须的,父类类型指针指向子类实例,执行会执行子类定义的函数)
析构函数必须是虚函数,构造函数不能是虚函数。
3. 多态的实现
根据虚函数表找到恰当的虚函数,对于一个父类对象指针类型变量,给父类指针调用父类的函数,给子类对象指针,调用子类中的函数。
4. struct和class区别
大体相似,区别是访问权限,struct访问的是public,class默认访问的是private。
5.描述内存分配方式以及区别
(1)静态存储区域分配,内存在编译时已经分配好了,例如全局变量,static变量
(2)在栈上创建,执行函数时,内部局部变量存储单元在栈上创建,结束时释放。
(3)在堆上创建:动态内存分配,运行时用malloc或new 申请任意内存,自己控制free 或delete。
6. 数组和指针区别?
数组要么在静态存储区被创建,要么在栈上被创建。指针可以随时指向任意类型内存块。
指针内存只有指针变量字节数。
7. static和const分别怎么用?
static:全局变量定义为一个全局静态变量。
内存中的位置:静态存储区(整个程序期间都存在)
初始化:未初始化为0
作用域:申明文件之外不可见
const: (1)限定变量为不可修改
(2)限定成员函数不可修改任何数据成员
8. 内联函数和宏的差别
内联函数在编译可以直接嵌到目标代码中,宏只是一个简单的替换。