C++入门
目录
快速简介
01.基础语法
02.运算符和表达式
03.判断和循环
04.函数实践
05.指针和引用
06.数组和容器
07.类和对象
7.1 面向对象思想
7.1.1 类的含义。类是面向对象编程基础,类是一种复杂数据类型的声明!
7.1.2 struct和class区别。class类默认成员属性是私有的,struct结构体默认成员属性是公开的。
7.2 类定义和对象
7.2.1 类的定义。用户自定义类型,设计类将属性和行为写到一起表现事物。可以把类看作模版。
7.2.2 创建对象。两种创建对象方式:待完善
7.2.3 访问类成员。创建对象以后,可以使用点号.来访问成员变量和成员函数!
7.2.4 对象指针。
7.2.5 案例实践
7.3 类成员属性
7.3.1 成员变量
7.3.2 成员函数
7.3.3 访问权限
7.3.4 成员设置私有
7.3.5 案例实践
7.4 对象初始化
7.4.1 构造和析构函数。构造函数在初始化对象时用到;析构函数对象销毁前调用。这两个编译器默认的是空实现!
7.4.2 构造函数分类。分为有参数构造和无参数构造。调用构造函数有三种方式:括号法,显示法,隐式转换法。
7.4.3 拷贝构造函数。三种方式:1.使用一个创建完毕对象来初始化新对象,2.给函数参数传递;3.值方式返回局部对象。
7.4.4 构造调用规则。默认构造函数,如果用户定义构造则不会创建默认构造函数。
7.4.5 初始化列表。
7.5 类对象使用
7.5.1 类对象作为类成员
类中的成员可以是另一个类的对象。举一个例子,手机是一个A类,学生是一个B类,每个学生会有一个手机。把A类可以看作是:对象成员!
那么当创建B对象时,A与B的构造和析构的顺序是谁先谁后?构造函数顺序是:先调用对象成员的构造,再调用本类构造;析构函数顺序跟构造顺序刚好相反。
7.6 对象模型和this指针
7.6.1 变量和函数存储
在C++中,类内的成员变量和成员函数分开存储。注意只有非静态成员变量才属于类的对象上。也可以理解为,静态变量,静态方法,普通方法都是不占用对象空间的。
7.6.3 空指针访问成员函数
C++空指针是可以访问成员函数,但是注意点:如果成员函数中用到了this指针则不可以
7.6.4 const修饰成员函数
成员函数后加const后我们称为这个函数为常函数。1.在常函数中不可修改成员属性,2.成员属性声明时加关键字mutable后,在常函数中依然可以修改。
7.7 友元函数和友元类
友元:目的就是让一个函数或者类,可以访问另一个类中私有成员。
三种实现:1.全局函数做友元;2.类做友元;3.局部函数做友元。
08.继承和派生
8.1 继承
8.1.1 继承基本语法
继承,针对有上下级关系的类,继承可以将子类少写很多重复代码【将通用代码抽取到父类】。
8.1.2 继承方式
继承的语法:class 子类 : 继承方式 父类
继承后可访问性,继承后的可访问性是指派生类(子类)对基类(父类)成员的访问权限(public,protected,private)。
8.1.3 继承中对象模型
8.1.4 继承中构造和析构顺序
继承中 先调用父类构造函数,再调用子类构造函数,析构顺序与构造相反
8.1.5 继承同名成员处理方式
当子类与父类出现同名的成员,如何通过子类对象,访问到子类或父类中同名的数据呢?
- 访问子类同名成员 直接访问即可
- 访问父类同名成员 需要加作用域
8.1.6 继承同名静态成员处理
同名静态成员处理方式和非静态处理方式一样,只不过有两种访问的方式(通过对象 和 通过类名)
09.多态与虚函数
10.多线程和并发
11.线程安全锁
12.内存分配堆和栈
12.9 数据拷贝
- 12.9.1 浅拷贝。指简单的赋值拷贝操作。
- 12.9.2 深拷贝。在堆区申请内存空间,然后进行拷贝操作。
13.IO流与文件
13.1 输入输出流
13.1.1 输入输出流
- 输出数据:从键盘读取数据,然后向屏幕输出数据
- 输入数据:从文件中读取数据,然后向文件中写入数据
C++全新IO解决方案:cin接受键盘输入数据,cout向屏幕输出数据,这个简称标准I/O
13.1.2 I/O库头文件
ios是所有流基类,派生出输入流istream
和输出流ostream
。并且这两个类使用了虚继承!
13.1.3 标准输出流cout
cout是标准输出流对象,用于向控制台或者终端输出数据。它是iostream
库中一部分。使用起来用运算符 << 输出数据即可。
13.1.4 标准输入流cin
13.1.5 标准错误流cerr
13.1.6 标准日志流clog
13.2 文件操作实践
13.2.1 文件是什么
文件是长久保存在本地的,文件格式是指约定内容的含义,比如txt文本文件是约定成可见字符ASCII码。
13.2.2 文件类型分类
文件类型分为两种:
- 文本文件 —— 文件以文本的ASCII码形式存储在计算机中
- 二进制文件 —— 文件以文本的二进制形式存储在计算机中,用户一般不能直接读懂它们
13.2.3 操作文件类
文件流说明, C++ 中另一个标准库 fstream,它定义了三个新的数据类型:ofstream,ifstream,fstream
- ifstream:专用于从文件中读取数据;
- ofstream:专用于向文件中写入数据;
- fstream:既可用于从文件中读取数据,又可用于向文件中写入数据。
ofstream 和 fstream 对象都可以用来打开文件进行写操作,如果只需要打开文件进行读操作,则使用 ifstream 对象。
关闭文件,close() 函数是 fstream、ifstream 和 ofstream 对象的一个成员。写读写文件操作完成后,关闭流对象。
13.2.4 文本文件写
- 默认打开模式,open() 函数是 fstream、ifstream 和 ofstream 对象的一个成员。用这个方法打开文件。
- 打开文件同时创建文件,可以使用std::ofstream类来打开文件并创建文件(如果文件不存在)。
写文件步骤如下:
- 包含头文件 :#include <fstream>
- 创建流对象 :ofstream ofs;
- 打开文件 :ofs.open("文件路径",打开方式);
- 写数据 :ofs << "写入的数据";
- 关闭文件 :ofs.close();
13.2.5 文本文件读
读文件与写文件步骤相似,但是读取方式相对于比较多。读文件步骤如下:
- 包含头文件 :#include <fstream>
- 创建流对象 :ifstream ifs;
- 打开文件并判断文件是否打开成功 :ifs.open("文件路径",打开方式);
- 读数据 :四种方式读取
- 关闭文件 :ifs.close();
13.2.6 二进制文件写
二进制方式写文件主要利用流对象调用成员函数write。函数原型 :ostream& write(const char * buffer,int len);
13.2.7 二进制文件读
二进制方式读文件主要利用流对象调用成员函数read。函数原型:istream& read(char *buffer,int len);
13.2.8 文件读写指针