自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(46)
  • 收藏
  • 关注

原创 C++学习笔记17——继承中的构造和析构

子类构造函数和父类构造函数子类中可以定义构造函数子类构造函数必须对继承而来的成员进行初始化直接通过初始化列表或者赋值的方法进行初始化调用父类构造函数进行初始化父类构造函数在子类中的调用方式默认调用适用于无参构造函数和使用了默认参数的构造函数显示调用通过初始化列表进行调用适用于所有父类构造函数 /* 测试代码*/#include<ios...

2018-04-09 10:13:04 261

原创 C++学习笔记16——继承的概念

类和类的关系组合关系 : 整体与部分的关系特点:将其他类的对象作为当前类的成员使用当前类的对象与成员对象的生命周期相同成员对象在用法上与普通对象完全一致继承关系:父子关系特点:子类拥有父类的所有属性和行为子类就是一种特殊的父类子类对象可以当作父类对象使用子类中可以添加父类没有的方法和属性 class Parent{private: in...

2018-04-08 11:29:40 237

原创 C++学习笔记15——智能指针分析

C++中的内存泄漏动态申请堆空间,用完后不归还C++语言中没有垃圾回收机制指针无法控制所指堆空间的生命周期 - 智能指针智能指针的概念:智能指针是一个特殊的指针智能指针生命周期结束时主动释放空间一片堆空间只能由一个指针标识智能指针的实现:重载指针特征操作符( -> 和 * )只能通过类的成员函数重载重载函数不能使用参数(只能定义一个重载函数)...

2018-04-06 22:06:11 239

原创 C++学习笔记14——C++中的操作符重载

操作符重载的概念C++中的重载能够扩展操作符的功能操作符的重载以函数的方式进行本质:用特殊形式的函数扩展操作符的功能通过operator关键字定义特殊的函数来**重载操作符语法:// Sign为系统中预定义的操作符Type operator Sign(const Type& p1, const Type& p2){ Type ret; ...

2018-04-06 17:16:54 262

原创 C++学习笔记13——二阶构造模式

工程开发中类对象的构造过程资源无关的初始化操作不可能出现异常情况的操作需要使用系统资源的操作可能出现异常情况,如:内存申请,访问文件构造函数的问题构造函数只能决定对象的初始状态,而不是对象的诞生构造函数只提供自动初始化成员变量的机会,不保证初始化逻辑一定成功执行return语句后构造函数立即结束半成品对象的概念初始化操作不能按照预期完成而得到的对象半成品对...

2018-04-05 20:02:11 373

原创 C++学习笔记12——类的静态成员

静态成员变量在C++中可以定义静态成员变量静态成员变量属于整个类所有可以通过类名直接访问公有静态成员变量所有对象共享类的静态成员变量可以通过对象名访问公有静态成员变量静态成员变量的特性在定义时直接通过static关键字修饰静态成员变量需要在类外单独分配空间语法规则:Type ClassName::VarName = value;静态成员变量在程序内部位于全局数据区...

2018-04-05 13:34:16 214

原创 C++学习笔记11——对象的构造

构造函数C++中可以定义与类名相同的特殊成员函数这种特殊的成员函数叫做构造函数构造函数没有任何返回类型的声明构造函数在对象调用时自动被调用/* 测试代码*/#include <stdio.h>class Test{private: int i; int j;public: Test() // 构造函数...

2018-03-19 20:37:32 221

原创 C++学习笔记10——类和封装

class关键字在C++中提供新的关键字class用于类定义C++中class和struct用法是完全相同的class和struct的区别在于:在使用struct定义类时, 所有成员的默认访问级别是public在使用class定义类时, 所有成员的默认访问级别是private类的封装封装的概念类的属性和行为有些可以对外公开,有些不对外公开必须在类的表示法中定义属性...

2018-03-06 21:05:29 250

原创 C++学习笔记9——面向对象基本概念

面向对象意义将日常生活中**习惯的思唯方式引入程序设计中将需求中的概念直观的映射到解决方案中以模块为中心构建可复用的软件系统提高软件产品的可维护性和可扩展性类和对象类和对象是面向对象中的两个基本概念类:指的是一类事物, 是一个抽象的概念, 用于抽象的描述一类事物所特有的属性和行为对象:指的是属于某个类的具体实体, 拥有所属类中描述的一切属性和行为类是一种模型, 这...

2018-03-06 15:22:51 177

原创 C++学习笔记8——新的类型转换

强制类型转换C方式强制类型转换存在的问题过于粗暴任意类型之间都可以进行转换, 编译器很难判断其正确性难于定位在源码中无法快速定位所以使用强制类型转换的语句C++将强制类型转换分为 4 种不同的类型static_cast强制类型转换用于基本类型间的转换不能用于基本类型指针间的转换用于有继承关系类对象之间的转换和类指针之间的转换const_cast强制类型...

2018-03-06 13:16:29 176

原创 C++学习笔记7——C++中的新成员

C++中的动态内存分配C++中通过 new 关键字进行动态内存申请C++中的动态内存申请是基于类型进行的delete 关键字用于内存释放/* 测试代码*/#include <stdio.h>int main(){ int* p = new int; // 变量申请 *p = 5; *p = *p + 10;...

2018-03-06 12:09:18 168

原创 C++学习笔记6——函数重载分析

C++中的函数重载用同一个函数名定义不同的函数当函数名和不同的参数搭配时函数意义不同/* 测试代码*/#include <stdio.h>#include <string.h>int func(int x){ return x;}int func(int a, int b){ return a + b;}i...

2018-03-06 09:39:48 196

原创 C++学习笔记5——内联函数分析

内联函数的概念C++编译器可以将一个函数进行内联编译被C++编译器内联编译的函数叫做内联函数C++编译器直接将函数体插入函数调用的地方内联函数具有普通函数的特征(参数检查, 返回类型等)内联函数没有普通函数调用时的额外开销(压栈, 跳转, 返回)C++中推荐使用内联函数替代宏代码片段C++中使用inline关键字声明内联函数inline int func(int a, in...

2018-03-05 20:17:03 248

原创 C++学习笔记4——引用的本质分析

引用的概念在C++中新增加了引用的概念引用可以看作一个已定义变量的别名引用的语法: Type& name = var;/* 测试代码*/#include <stdio.h>int main(){ int a = 2; int& b = a; // b 为 a 的别名 b = 5; ...

2018-03-05 19:34:16 161

原创 C++学习笔记3——布尔类型和三目运算符

布尔类型的概念C++中的布尔类型C++在C语言的基本类型系统上增加了bool布尔类型是C++中的基本数据类型可以定义布尔类型的全局变量可以定义布尔类型的常量可以定义布尔类型的指针可以定义布尔类型的数组…C++中的bool可取的值只有 true 和 falsetrue代表真值, 编译器内部用 1 来表示false代表非真值, 编译器内部用 0 来表示C++编译器会将...

2018-03-04 21:20:53 479

原创 C++学习笔记2——C++中的const

C语言中的constconst修饰的变量是只读的, 本质还是变量const修饰的局部变量在栈上分配空间const修饰的全局变量在只读存储区分配空间const只在编译期有用, 在运行期无用注意:const修饰的变量不是真的常量, 它只是告诉编译器该变量不能出现在赋值符号的左边C++中的constC++在C的基础上对 const 进行了进化处理编译器当碰见 const ...

2018-03-04 15:54:00 252

原创 C++学习笔记1——C到C++的升级

C和C++的关系C++继承了所有C的特性C++在C的基础上提供了更多的语法和特性C++的设计目标是运行效率与开发效率的统一C到C++的升级1:变量C语言中的变量都必须在作用域开始的位置定义C++更强调实用性,所有的变量都可以在需要使用时在定义for(int i = 0; i < 10; i++){ for(int j = 0; j < 10;...

2018-03-04 10:46:47 246

原创 C语言学习笔记29——函数与宏分析

函数与宏比较 函数与宏的比较 1 宏是由预处理器直接进行文本替换,编译器不知道宏的存在,参数无法进行类型检查 函数是由编译器直接编译的实体,调用行为由编译器决定的,参数类型进行严格检查 2 宏多次使用会导致最终可执行程序的体积增大 函数是跳转执行的,内存中只有一份函数体存在 3 宏因为是直接展开执行的,无调用开销,效率比...

2018-03-03 19:41:25 214

原创 C语言学习笔记28——函数参数的秘密

函数参数函数参数在本质上与局部变量相同在栈上分配空间函数参数的初始值是函数调用时的实参值函数参数的求值顺序依赖于编译器的实现/* 测试代码 */#include <stdio.h>int func(int i, int j){ printf("%d, %d\n", i, j); return 0;}int main(){ in...

2018-03-03 16:57:14 308

原创 C语言学习笔记27——内存操作分析

野指针指针变量中的值是非法的内存地址,进而形成野指针野指针不是NULL指针,是指向不可用内存地址的指针NULL指针并无危害,很好判断,也很好调试C语言中无法判断一个指针所保存的地址是否合法野指针的由来局部指针变量没有被初始化指针所指向的变量在指针之前被销毁使用已经释放过的指针进行了错误的指针运算进行了错误的强制类型转换/* 测试代码 */#includ...

2018-03-03 15:56:29 219

原创 C语言学习笔记26——程序的内存布局

程序和进程程序是静态的概念,表现形式为一个可执行文件进程是动态的概念,程序由操作系统加载运行后得到进程每个程序可以对应多个进程每个进程只能对应一个程序程序的内存布局堆栈段:在程序运行后(进程)才正式存在,是程序运行的基础(.bss)段:存放的是未初始化的全局变量和静态变量(,data)段:存放的是已经初始化了的全局变量和静态变量(.text)段:存放的是程序中的可执行...

2018-03-03 10:48:42 180

原创 C语言学习笔记25——栈,堆和静态存储区

程序中的栈栈是现代计算机程序中最重要的概念之一栈在程序中用于维护函数调用上下文函数中的参数和局部变量存储在栈上栈保留了一个函数调用所需的维护信息参数返回地址局部变量调用上下文… 函数调用过程每次函数调用都对应着一个栈上的活动记录调用函数的活动记录位于栈的中部被调函数的活动记录位于栈的顶部函数调用时,对应的栈空间在函数返回前是专用的函数调用结束后,栈空间...

2018-03-02 22:05:50 241

原创 C语言学习笔记24——动态内存分配

动态内存分配的分析1:意义C语言中的一切操作都是基于内存的变量和数组都是内存的别名内存分配由编译器在编译期间决定定义数组的时候必须指定数组长度数组长度是在编译期就必须确定的动态内存分配的分析2:malloc 和 free在程序运行的过程中,可能需要使用一些额外的内存空间malloc 和 freemalloc 和free 用于执行动态内存分配和释放mallo...

2018-03-02 19:24:09 254

原创 C语言学习笔记23——函数和指针分析

函数与指针分析1:函数类型C语言中的函数有自己特定的类型函数的类型由返回值, 参数类型和参数个数共同决定int add(int i, int j) 的类型为 int(int, int)C语言中通过typedef为函数类型重命名typedef type name(parameter list)例:typedef int f(int, int); // 重命名typed...

2018-03-02 11:45:50 215

原创 C语言学习笔记22——数组参数和指针参数

数组参数和指针参数的分析:退化在C语言中:数组参数将会退化为指针退化的意义:C语言中只会以值拷贝的方式传递参数C语言以高效作为最初设计目标,当向函数传递数组时:将整个数组拷贝一份传入函数 (不可取,效率过低, 数组太大时会导致栈溢出)将数组名看做常量指针传数组首元素地址(可取)多维数组(例:二维数组)二维数组同样存在退化的问题二维数组可以看做是一维数组二维数...

2018-03-01 20:58:23 252

原创 C语言学习笔记21——多维数组和多维指针

多维指针:(指向指针的指针)在C语言中:指针的本质是变量指针会占用一定的内存空间可以定义指针的指针来保存**指针变量的地址值为什么需要指向指针的指针指针变量也同样存在传值调用和传址调用/* 测试代码 重置动态空间的大小*/#include <stdio.h>#include <malloc.h>int reset(cha...

2018-03-01 16:35:36 226

原创 C语言学习笔记20——main函数和命令行参数

main函数的本质C语言中main函数称之为主函数一个C程序是从main函数开始执行的main函数是操作系统调用的函数操作系统总是将main函数作为应用程序的开始操作系统将main函数的返回值作为程序的退出状态下面的 main 函数定义都正确吗?A.main(){}B.void main(){}C.int main(){}D.int m...

2018-03-01 10:10:23 297

原创 C语言学习笔记19——数组指针和指针数组分析

数组类型在C语言中:数组有自己特定的数据类型数组的类型由 元素类型 和 数组大小 共同决定 例: int array[5] 的类型为 int[5] C语言中通过 typedef 为数组类型重命名typedef type(name)[size]; 例:typedef int(AINT5)[5]; // 重命名AINT5 iArray; //...

2018-02-28 18:10:32 171

原创 C语言学习笔记18——C语言中的字符串

字符串的概念字符串是有序字符的集合字符串是程序中的基本元素之一C语言中没有字符串的概念C语言中通过特殊的字符数组模拟字符串C语言中的字符串是以 ‘\0’ 结尾的字符数组编译器总是会在字符串字面量的末尾添加 ‘\0’字符串与字符数组在C语言中:双引号引用的单个或多个字符是一种特殊的字面量存储于程序的全局只读存储区本质为字符数组, 编译器自动在结尾加上 ‘\...

2018-02-28 13:49:35 233

原创 C语言学习笔记17——数组与指针

指针的运算指针与整数的运算规则:指针和整数可以进行运算, 其结果为指针p + n <==> (unsigned int)p + n * sizeof(*p)结论: 当指针 p 指向一个同类型的数组的元素时: p + 1 将指向当前元素的下一个元素p - 1 将指向当前元素的上一个元素 /* 测试代码 */#include <stdio....

2018-02-27 20:37:04 161

原创 C语言学习笔记16——数组的本质

数组的概念在C语言中:数组是相同类型的变量的有序集合 数组大小数组在一片连续的内存空间中存储元素数组元素的个数可以显示或隐式指定例:int a[5] = {1, 2}; int b[] = {1, 2};问题: 1. a[2], a[3], a[4] 的值是多少? 2. b包含了多少元素/* 测试代码 */#include <stdio...

2018-02-27 13:15:58 293

原创 C语言学习笔记15——指针的本质分析

指针的分析1:* 号的意义在C语言中:在指针声明时, * 号表示所声明的变量为指针在指针使用时, * 号表示取指针所指向的内存空间中的值int i = 0;int j = 0;// 指针声明int* p = &i;// 取值 (* 号类似一把钥匙, 通过这把钥匙可以打开内存, 读取内存中的值)j = *p;指针的分析2:传值调用和传址调用指...

2018-02-26 21:26:23 320 1

原创 C语言学习笔记14——#pragma使用分析

#pragma简介#pragma 用于指示编译器完成一些特定的动作#pragma 所定义的很多指示字是编译器特有的#pragma 在不同的编译器间是不可移植的预处理器将忽略他不认识的#pragma指令不同的编译器可能以不同的方式解释同一条#pragma指令用法:#pragma parameter注:不同的parameter参数语法和意义各不相同#pragm...

2018-02-26 17:25:00 350

原创 C语言学习笔记13——条件编译使用分析

在C语言中:条件编译的行为类似于C语言中的 if…else…条件编译是预编译指示命令,用于控制是否编译某段代码/*测试代码*/#include <stdio.h>#define C 1int main(){ #if(C == 1) printf("This is first printf...\n"); #else ...

2018-02-25 21:34:08 331

原创 C语言学习笔记12——宏定义与使用分析

宏定义在C语言中:#define 是预处理器处理的单元实体之一#define 定义的宏可以出现在程序的任意位置#define定义之后的代码都可以使用这个宏定义宏常量: #define定义的宏常量可以直接使用#define定义的宏常量本质为字面量宏定义的分析1: 宏定义与函数的对比宏表达式被预处理器处理(直接对宏进行文本替换), 编译器不知道宏表达式的存在预...

2018-02-25 17:36:40 225

原创 C语言学习笔记11——++ 和-- 操作符分析

++和 - - 操作符分析1:本质在C语言中:++ 和 - -操作符对应两条汇编指令前置变量自增(减) 1 取变量值后置取变量值变量自增(减) 1++和 - - 操作符分析2:C语言中的灰色地带C语言中只规定了 ++ 和 - - 对应指令的相对执行次序++ 和 - - 对应的汇编指令不一定连续运行在混合运算中, ++ 和 - - 的汇编指令可能被打断...

2018-02-24 16:52:58 226

原创 C语言学习笔记10——位运算符分析

位运算符的分析1:效率在C语言中:位运算符直接对bit位进行操作, 其效率最高左移和右移运算符注意点左操作数必须为整数类型char 和 short 被隐式转换为 int 后进行移位操作右操作数的范围必须为:【0, 31】左移运算符 << 将运算数的二进制位左移规则: 高位丢弃, 低位补 0 小技巧: 左移 n 位相当于乘以 2 的 n 次方, 但效率比数...

2018-02-24 13:36:10 233

原创 C语言学习笔记9——逻辑运算符

&& 和 || 的分析1 : 程序中的短路在C语言中:|| 从左向右开始计算:当遇到为真的条件时停止计算, 整个表达式为真所有表达式为假时表达式才为假&& 从左向右开始计算:当遇到假的条件时停止运算, 整个表达式为假所有条件为真时表达式才为真&& 和 || 的分析2:优先级在C语言中:逻辑表达式中, &a...

2018-02-21 21:16:14 391

原创 C语言学习笔记8——enum, sizeof,typedef

enum的分析在C语言中:enum是一种自定义类型enum的值是可以根据需要自定义的整型值第一个定义enum值默认为0默认情况下的enum值是在前一个定义值的基础上加1 enum类型的变量只能取定义时的离散值enum的特殊意义:enum中定义的值是C语言中真正意义上的常量在工程中enum多用于定义整型常量 /* 测试程序*/#include &lt...

2018-02-18 18:47:51 223

原创 C语言学习笔记7——union

union(联合体)在C语言中:union在语法上与struct相似union只分配最大成员的空间, 所有员共享这个空间/*测试代码*/#include <stdio.h>struct A{ int a; int b; int c;};union B{ int a; int b; int c;};...

2018-02-16 22:33:18 222

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除