C++
gakki的二向箔
学生,Master of science, 电子与计算机工程
展开
-
堆、栈内存区 与 全局、局部、静态变量
一个C++程序占用的内存分为几个部分:栈区存放函数的参数值,局部变量值。连续的内存区域。由编译器自动分配释放。堆区由程序员分配释放,调用delete。若程序员不释放,操作系统在程序结束时回收。 (与数据结构中的堆不是一回事,分配方式类似于链表。内存空间不连续。)全局区/静态区全局变量和静态变量存放在一起,初始化的全局变量和静态变量在同一块区域,未初始化的全局变量和静态变量...原创 2017-09-13 19:31:21 · 250 阅读 · 0 评论 -
多态、虚函数、纯虚函数、抽象类
多态意味着调用成员函数时,会根据调用函数的对象的类型来执行不同的函数虚函数是C++中用于实现多态的机制形成条件:存在继承关系基类、派生类中有同名虚函数存在基类类型的指针或者引用,通过该指针或引用调用虚函数虚函数是在基类中使用关键字 virtual 声明的函数。在派生类中重新定义基类中定义的虚函数时,会告诉编译器不要静态链接到该函数。子类可自主选择是否要提供一份属于自己的个性化虚函数实现。可以根据所...原创 2018-04-10 16:46:05 · 166 阅读 · 0 评论 -
计算内存空间
数组 int **a[3][4]; 占多大空间?用右左法则来看,首先往变量a的右边看,是【3】,再往左看,是*,所以它首先是一个指针数组,数组里存放3个指针,然后再往右看是【4】,再往左看,是int *,说明前面3个指针每个指针都指向一个数组,每个数组里存放4个int *类型的指针,所以3*4有12个二级指针,每个指针在32位系统占4个字节,所以48个字节...原创 2018-03-20 20:13:42 · 374 阅读 · 0 评论 -
auto, static, extern
auto 局部变量 auto 变量是用堆栈(stack)方式占用储存器空间,因此,当执行此区段是,系统会立即为这个变量分配存储器空间,而程序执行完后,这个堆栈立即被系统收回.在大括号{}内声明。 自动变量就是指在函数内部定义使用的变量。他只是允许在定义他的函数内部使用它。在函数外的其他任何地方都不能使用的变量。自动变量是局部变量,即它的区域性是在定义他的函数内部有效。当然这说明自动...原创 2018-03-20 16:34:41 · 220 阅读 · 0 评论 -
重载 重写
重载 overload同名不同参的函数之间,互称重载函数。函数名相同,但是参数列表不同,参数的个数、顺序、或类型不同。(但是不能靠返回类型来判断)函数名字相同参数不同在同一个作用域中返回值可以相同、可以不同virtual 关键字可有可无应用场景:对不同类型int, double的参数采取不同的操作重写(覆盖) override派生类重新定义基转载 2017-09-17 11:30:04 · 174 阅读 · 0 评论 -
继承与访问修饰符public, protected, private
public在类的外部可访问public 继承:基类中的public, protected, private 成员的访问属性,在派生类中分别变成:public, protected, privateprotected可被派生类即子类访问protected 继承:基类中的public, protected, private 成员的访问属性,在派生类中分别变成:protected, protected...原创 2017-09-19 21:22:34 · 378 阅读 · 0 评论 -
构造函数与析构函数
构造函数构造函数的名称与类名相同。在每次创建类的的新对象时执行一下。构造函数的定义放在类内、类外都行。析构函数在每次删除所创建的对象时执行。不接受参数不能指定返回类型无法使用return返回值无法声明为 const、volatile 或 static。 但是,可以为声明为 const、volatile 或 static 的对象的析构调用它们。可以声明为 vi转载 2017-09-19 21:44:17 · 319 阅读 · 0 评论 -
core dump
前几天面试的时候,面试官问我,请大概讲一讲C++的core dump当时我一脸懵逼,从来没听过。于是决定了解一下core dump,起码达到能够面试的水平。core dump 核心转储进程终止运行时,操作系统会将此时进程的地址空间的内容、寄存器状态、堆栈指针等进程状态信息写出的一个磁盘文件。用途用于调试,查找进程停止的原因造成core dump的情况内存访问越界由于使用错误的下标,导致数组访问越界...原创 2017-09-11 10:53:25 · 235 阅读 · 0 评论 -
指针 引用
指针对于一个类型p,p*就是指向p的指针,即一个p*类型的变量保存p对象的地址。(类型p可以加限定词const、volatile等等)引用引用是一个变量对象的别名,用于函数参数和返回值类型,使用方法与被引用的变量相同。引用是一种隐式的指针,对它的操作都会被解释为对它引用的对象的操作。 引用在定义时必须初始化为一个变量,否则会引发编译错误。符号X&表示转载 2017-09-17 12:17:35 · 312 阅读 · 0 评论 -
static与extern
static静态全局变量:该变量在全局数据区分配内存;在声明它的整个文件都是可见的,在文件之外不可见。未经初始化的静态全局变量会被程序自动初始化为0,而在函数体内声明的自动变量的值是随机的,除非被显式初始化。在文件A中定义全局变量,可以在文件B中extern声明后访问。 若变量被static修饰后,则不可以,因为其作用域由原来的整个工程可见变为只有本源文件可见。静态局部变量:当在局部变量前加sta...原创 2017-08-30 20:47:05 · 238 阅读 · 0 评论 -
内存泄露与内存溢出
内存泄露程序中已动态分配的堆内存没有释放,造成系统内存的浪费,导师程序运行速度减慢、甚至系统崩溃。通过malloc, realloc new等从堆中分配的内存,在用完后需用free, delete删掉内存溢出申请内存时,没有足够内存供使用。常见情景:内存分配后,未初始化就引用。使用free, delete释放内存后,没有将指针设置为null,导致产生野指针。原创 2017-09-13 20:34:20 · 158 阅读 · 0 评论 -
C++的数据抽象、数据封装
数据抽象仅向用户暴露接口而把具体的实现细节隐藏起来的机制 (而抽象类是指含有虚函数的类)使用访问标签来定义类的抽象接口。一个类可以包含多个或零个访问标签使用公共标签定义的成员都可以访问该程序的所有部分。一个类型的数据抽象视图是由它的公共成员来定义的。使用私有标签定义的成员无法访问到使用类的代码。私有部分对使用类型的代码隐藏了实现细节。指定的访问级别会一直有效,直到遇到下一个访问标签或者遇到类...转载 2018-04-19 11:25:11 · 550 阅读 · 0 评论