码迷,mamicode.com
首页 > 编程语言 > 详细

c++知识点总结(不时更新)

时间:2015-08-05 16:25:03      阅读:120      评论:0      收藏:0      [点我收藏+]

标签:c++   知识点盲区总结   

【面向对象的概念】

世间万物皆有属性和方法,将这些封装起来就是一个对象,面向对象编程思想总结起来其特点就是封装,继承,多态等,类的实例就是一个对象,类中数据成员,成员函数就是对象的属性和操作,实例关系和继承关系就是对象之间的静态关系,而消息传递就是对象之间的动态关系,多态实现了消息传递时对象的反应动作,面向对象与面向过程不对立,相互补充,面向对象能够解决更多复杂的问题,面向对象编程思想更能适用于大型软件设计系统设计。

【内存分配】

栈区:
存储函数的参数,局部变量,程序的返回地址等,编译器需要的时候会自动分配内存,不需要的时候会自动清除。
堆区:
由程序员分配和释放,若程序员不释放,程序结束时操作系统会释放,分配方式类似于链表,动态分配的内存都是在这里,new,malloc,需要用delete,free来释放。
静态区或者全局区:
静态变量和全局变量都放在这里,程序结束后系统释放,初始化的静态变量和全局变量放在一块,未初始化的放在相邻的另一块区域。
文字常量区:
常量字符串,const类型不允许修改
程序代码区:
存放函数体的二进制代码
参考:http://blog.csdn.net/hairetz/article/details/4141043

【堆和栈的区别】

1.从空间分配角度
在Windows下,栈是向低地址扩展的数据结构,是一块连续的内存的区域,栈顶的地址和栈的最大容量是系统预先规定好的,能从栈获得的空间较小,遍历是从高地址向低地址,有操作系统自动分配并释放,存放函数的参数值,局部变量的值等,其操作方式类似于数据结构中的栈;

堆是向高地址扩展的数据结构,是不连续的内存区域。这是由于系统是用链表来存储空闲内存地址的,自然是不连续的,而链表的遍历方向是由低地址向高地址。堆的大小受限于计算机系统中有效的虚拟内存。由此可见,堆获得的空间比较灵活,也比较大,由程序员分配释放,程序员若不释放,程序结束时操作系统可能会释放回收,new,malloc申请的动态空间都是在这里存储。

2.数据结构区别
栈:先进后出的数据结构;
堆:一棵完全二叉树,分为大顶堆和小顶堆

3.缓存方式区别
栈使用的是一级缓存,通常被调用时处于存储空间中,调用完毕后立即释放;
堆是存放在二级缓存中,生命周期由虚拟机的垃圾回收算法来决定。

【虚函数/纯虚函数】

基类中vitual声明的函数,期望派生类能够重定义的虚函数,在派生类中此函数也是虚函数,vitual关键字在派生类中可以省略。用来实现多态的,纯虚函数的意义是该函数为后代类型提供了可以覆盖的接口,但是这个类中的版本是绝对不会调用,并且这个类不能够创建对象,这个类的存在仅是为了让其他类继承。

【多态】

多态性是指相同的对象收到不同的消息或者不同的对象收到相同的消息时产生的不同的动作,仅用于通过继承而相关联的类型的引用或者指针,c++中,定义为虚函数是基类期盼派生类重定义实现多态的。

【const用法】

const修饰起到保护作用,可以声明变量,指针,函数参数返回值等,它修饰过的就是不能被改变的

【c/c++分配和释放内存区别】

c:
malloc/free,calloc,realloc均为函数
指针名=(数据类型*)malloc(要申请的内存大小sizeof(type))
指针名=(数据类型*)calloc(n,类型大小sizeof(type)),分配n个大小为size的连续内存。
指针名=(数据类型*)realloc(要改变内存大小的指针名,新的大小)

c++:
new/delete 为运算符

malloc与free是C++/C语言的标准库函数,new/delete是C++的运算符。它们都可以用于申请动态内存和释放内存。对于非内部数据类型对象而言,光用malloc/free无法满足动态对象的要求。对象在创建的同时要自动执行构造函数,对象在消亡之前要自动执行析构函数。由于
malloc/free是库函数而不是运算符,不在编译器控制权限之内,不能够把执行构造函数和析构函数的任务强加于malloc/free。

版权声明:本文为博主原创文章,未经博主允许不得转载。

c++知识点总结(不时更新)

标签:c++   知识点盲区总结   

原文地址:http://blog.csdn.net/xinyu913/article/details/46929259

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!