day1
C语言与C++区别
C语言与C++区别 | ①编程思想不同,C语言是面向过程(按照步骤一步一步完成)的结构化程序设计语言(中级语言),注重过程,只有过程对了,才有好的结果;C++是面向对象的编程语言不关注过程,只注重结果。C++描述的是属性+行为整合。 ②C++完全兼容C语言,只要是合法的C语言程序在C++中都可以使用。 ③C++比C语言多了++,C++在C语言的基础上扩充了很多内容,包括关键字、数据类型等等。 |
C++应用领域
C++应用领域 | ①QT---嵌入式产品的UI设计。 ②人工智能领域,图像处理(人脸识别)。 ③游戏开发。 |
命名空间
命名空间的作用 | 用来处理变量名和函数名相同时的命名冲突 | ||||
格式 | namespace 命名空间的名字 { 变量; 函数体; 自定义的数据类型; ······ }; | ||||
访问 | 方法一 | using namespace 命名空间的名字; int main() { ····· } | 方法二 | int main() { ····· 命名空间的名字::成员; } | |
分类 | 标准命名空间、自定义命名空间 |
标准输入输出流
位置 (处于标准命名空间中) | #include<iostream> using namespace std; | |||
输入 | 给目标从键盘上输入值 | cin>>目标; | ||
直接给目标赋值 | cin>>赋值>>目标; | |||
输出 | 将目标中的值输出 | cout<<目标; | ||
直接输出 | cout<<“”<<“”<<“”; | |||
换行endl的作用是结束本行,同换行作用 | cout<<目标<<endl; | |||
cin与cout的优点 | 不需要什么格式命名,输入也不需要关注要不要加&符号! |
引用类型——指针对比
引用的作用 | 弱化指针;减少临时空间的开辟 | |
格式 | 数据类型 &引用名字 = 变量名; //变量名必不可少,一旦确定就不可改变 | |
指针与引用有什么区别 | 1、作用不同:指针用来保存地址;引用是给变量起别名的。 2、定义不同:指针变量是需要分配内存空间的(在32位系统中占4个字节);引用不需要额外的分配内存空间,他和变量指向同一块内存空间。 3、初始化不同:指针变量可以不给初始化,建议给初始化为null;引用是必须给初始化的。 4、使用上不同:指针变量指向的地址是可以变化的;引用一旦初始化了就不可以改变。因此使用引用比使用指针更安全。 5、应用:函数的参数设计上;在C++中尽量少使用指针传参,因为引用可以实现和指针一样的效果! |
函数重载
定义 | 函数名相同,函数功能相似,参数不同(类型不同,数量不同,类型顺序不同),与返回值类型无关的一组函数 |
特性 | 减少代码冗余、可维护可扩充的、功能单一、高内聚低耦合。 |
用gcc编译与用g++编译的差异 | 用gcc编译时,函数名不会发生变化,函数地址就不会变。 用g++编译时,函数名就会发生变化,根据根据函数名,形参个数以及形参类型进行命名,对应的函数地址就会发生变化。就可以对函数名相同的进行区分。 |
参数默认值
定义 | 在定义函数时直接给函数赋初始值,调用的时候如果给值,就使用给的值,如果不给值,就使用初始值。 |
给函数中参数赋初始值规则 | 1、在定义函数时直接给函数赋初始值时从右往左依次去给,不能跳过。调用时实参与形参的匹配是从左往右依次匹配。 2、当定义函数和函数声明同时出现时,给函数赋初始值只能出现一次,不能重复出现。 |
C++中引入C的库
方法:在静态库中区分 gcc编译器和g++编译器。 | #ifdef __cplusplus //两个下划线 extern “C” { 定义函数; ······ } #else 定义函数; ······ #endif |
动态内存分配
申请单个不连续空间 | a=new 数据类型; //不初始化 a=new 数据类型(); //初始化 |
释放单个不连续空间 | delete a; |
申请多个连续空间 | a=new 数据类型[5]; //不初始化 a=new 数据类型[5](); //初始化 |
释放单个不连续空间 | delete [] a; |
day2
面向对象编程中的类和对象
对象 | 数据+操作 | 类 | 具有相同的数据和相同的操作的一组对象的集合 | |||
类和对象的关系 | 类是对象的抽象,对象是类的实例 | |||||
四大特性 | 1、抽象:通过特定的实例(对象)抽取共同性质后形成概的过程,包括数据抽象和代码抽象。 2、封装:把数据和显示操作的代码集中起来放在对象内部,并尽可能隐蔽对象的内部细节,信息屏蔽。 3、继承:对象类之间相关的关系,继承类的特征和能力。 4、多态:不同的对象收到相同的消息时产生多种不同的行为方式。 | |||||
C语言中的结构体(gcc)与C++中结构体(g++)的区别? | 1、C语言中的结构体中不可以有函数;C++中的结构体中是可以有函数。 2、C语言中的结构体为空时,所占内存大小为0;C++中的结构体为空时,所占内存大小为1。 | |||||
类的格式 | class 类名 { 属性; + 行为; }; | |||||
C++中的类与C++中结构体的区别? | 1、关键字不一样,一个struct,一个是class。 2、C++中结构体内部的成员默认访问限定符是public(共有的);C++中类内部的成员默认访问限定符是private(私有的)。 3、C++中的类与C++中结构体中成员的初始化方式不一样。类用构造函数的方式,结构体用集合的方式。 | |||||
类中的3种访问限定符 | 1、public(公有的):类的内部和类的外部都可以访问。 2、private(私有的):类的外部是不可以访问,只能在类的内部使用。 3、protected(受保护的):类的外部是不可以访问,只能在类的内部使用。 | |||||
创建类对象 | 类名 对象名; 类名 *对象名 = new 类名; | |||||
释放类对象空间 | delete 对象名; |
封装
封装的定义 | 把一类事物的属性和行为用类这个自定义的数据类型包起来,public(公开的)区域放这一类事物的行为,private(私有的)区域放这一类事物的属性 |
封装的格式 | class 类名 { public: 行为(成员函数); private: 属性(数据成员); protected: ...... }; |
字符串的数据类型 | #include<string> string 名字;//占28个字节 |
this指针
this指针的定义 | 是一个指针,用来保存地址;每一个成员函数都有一个隐藏参数,就是这个this指针。当调用这个成员函数的时候,this指针变量保存的是当前对象的地址。 |
作用 | 形参的名字可能跟类成员名字相同,用this可以对他们进行区分。this->成员 |
两种访问成员格式 | 普通对象的访问成员:对象名.成员名; |
指针类型的对象访问成员:指针->成员; |
类中的特殊的成员
三种特殊的成员 | 构造函数 析构函数 拷贝构造函数 |
共同点 | 如果类的成员中没有这三个成员,系统就会自动生成并根据情况调用。自动生成的都是空的,自动生成的拷贝构造函数属于浅拷贝。 |
作用 | 构造函数作用:给对象分配内存空间,并对数据成员进行初始化。 析构函数作用:当对象生命周期结束的时候,会帮我们去做对象释放前的清理工作(资源回收)。 拷贝构造函数作用:用一个已经存在的对象去初始化一个正在创建的对象的时候会执行。(类名 新对象名 = 旧对象名;)当函数的参数是类类型的对象名时也会执行。(类名 对象名) |
构造函数格式 | 没有函数类型,并且函数名和类名是一样的 |
类名(参数个数不定) //可以发生重载 { ...... } | |
三种默认构造函数(互斥,只能存在一个) | 1、自己没写,系统自动生成的构造函数。 2、自己写的无参构造函数。 3、自己写的构造函数中的每个参数都有默认值。 |
析构函数格式 | 函数名和类名一样,在前面要记得加一个符号~,无参 |
~类名() //不可以发生重载 { ...... } | |
拷贝构造函数格式 | 函数名和类名是一样的,参数有一个,并且是类类型的引用 |
类名(类名 &) { ...... } | |
拷贝构造函数种类 | 1、浅拷贝:只适用于没有指针类型成员的类。 2、深拷贝:如果类的成员里有指针类型的成员,指针类型的数据成员 需要进行动态开空间,进行拷贝的时候就要重新给指针类型的成员分配空间,释放的时候去释放自己的空间。系统生成的拷贝构造函数属于浅拷贝,深拷贝需要自己去写。 |
执行拷贝构造 的情况 |
|