c语言虚函数面试 c++虚函数面试题( 三 )


②:在展区创建;在执行函数时 , 函数内局部变量的存储单元都可以在栈上创建,函数执行结束时,自动被释放 。效率高,但是内存容量有限 。
③:从堆上分配:或者叫:动态内存分配 。程序员自己负责在何时用free或delete释放内存 。
C语言中用带参数的宏定义 , C++中用inline
生命周期不同 空间 周期
局部变量 函数调用时创建,结束时销毁 。static除外
局部变量不具有外部链接,全局变量
全局变量:静态数据区
局部变量: 放在栈区
malloc、free是C++/C语言标准库 , new、delete是C++运算符 。
注意:new、delete不是库函数;
malloc/free无法满足 对象在创建的时候要自动执行构造函 数,对象消亡之前要自动执行 析构函数。他们是库函数 , 而不是运算符,不在编译器的控制权限内 ,  。
new、delete 能完成内存的分配和释放,已经初始化和清理工作 。
判断指针是否为空 , 如果空,则打印错误log , 并且return,终止本函数 。
不是,两个不同类型的指针可以强制转换 。
动态申请;
知道运行时才知道一个对象需要多少存储空间,不需要知道对象的生存周期有多长 。
Debug调试版本,它包含调试信息,比如assert的适用,并且不作任何优化,便于程序员调试程序 。
Release称为发布版本,他往往时进行了各种优化,
析构函数时特殊的类成员函数 , 没有返回类型 , 没有参数,不能随意调用,也没有重载,只有在类对象的生命周期结束时,有系统自己调用 。优势方内存空间的作用 。
虚函数是C++多态的一种表现 , 使用虚函数,我们可以灵活的进行动态绑定,当然是以一定的开销为代价
(这里虚函数的适用还是不太懂,需要进一步学习,比如怎么调用子类的一切?。?
导致文件描述符结构中指针指向的内存背重复释放,进而导致一些不可预期的异常 。
比如全局变量的初始化,就不是有main函数引起的 。例如:
全局对象的构造函数,会在main函数之前执行 。
多态,纯虚函数 , 抽象类
内联函数
虚函数的特点:如果希望派生类能够重新定义基类的方法,则在基类中将该方法定义为虚方法,这样可以启用动态联编 。
内联函数的特点:使用内联函数的目的屎我了提高函数的运行侠侣 。内联函数的代码不能过长 , 因为内联函数省去调用函数的时间是以代码膨胀为代价的 。内联函数不能包含循环语句 。因为执行循环语句要比调用函数的开销大 。
函数模板的实例化是由编译程序在处理函数嗲用时自动完成的,
类模板的实例化必须由程序员在程序中显示的指定
函数名和参数列表
不能被重载的运算符:
①:不能改变C++内部数据类型(如int float 等)的运算符
②:不能重载“.”,因为.在类中对任何成员都有意义,已经成为标准用法
③:不能重载目前C++运算符集合中没有的符号,如:@,等 。愿意:一是难以理解,二是无法确定优先级
④:对已经存在的运算符重载不能改变优先级规则 , 否则将引起混乱 。
有可能是派生类无法调用析构函数
模板可以说比较古老了,但是当前的泛型编程实质上就是模板编程 。他体现了一种通用和泛化的思想 。
STL有7中容器:
vector(零食进行存储数据的访问),list(经常进行数据的增删改查),deque(队列结构) , map,multimap,set(构造栈形的数据使用),multiset.

推荐阅读