C++入门看这一篇就够了——超详细讲解(120000多字详细讲解,涵盖C++大量知识)
目录
一、面向对象的思想
二、类的使用
1.类的构成
2.类的设计
三、对象的基本使用
四、类的构造函数
1.构造函数的作用
2.构造函数的特点
3.默认构造函数
3.1.合成的默认构造函数
3.2.手动定义的默认构造函数
四、自定义的重载构造函数
五、拷贝构造函数
1.手动定义的拷贝构造函数
2.合成的拷贝构造函数
3.什么时候调用拷贝构造函数
六、赋值构造函数
七、析构函数
八、this指针
九、类文件的分离
十、静态数据
1.静态数据成员
2.静态成员函数
十一、常成员
1.const数据成员
2.const成员函数
十二、组合和聚合
聚合
组合
十三、常见错误总结
十四、继承与派生
1.什么是继承和派生?
2.继承和派生在 UML 中的表示
3.派生和基继承的实现
4.派生类(子类)对象的内存分布
5.protected(保护)访问权限
十五、派生和继承的各种方式
1.什么时候使用继承和派生
十六、子类对父类成员的访问权限
十七、子类的构造函数
1.调用父类的哪个构造函数
2.子类和父类的构造函数的调用顺序
十八、子类的析构函数
十九、子类型关系
1.什么是子类型
2.子类型的作用:
3.子类型的应用
二十、多重继承
1.为什么要使用多重继承?
2.什么是多重继承
3.多重继承的用法
4.多继承的构造函数
5.多继承的构造函数的调用顺序
二十一、多重继承的二义性
二十二、虚基类
1.多重继承在”菱形继承”中的重大缺点
2.解决方案
二十三、常见错误总结
1.默认访问权限和语法要求
2.类的成员的访问权限, 与继承方式的区别
二十四、C++流
1.文件流
2.对文本文件流读写
3.对二进制文件流读写
4.对文件流按格式读写取数据
5.文件流的状态检查
6.文件流的定位
二十五、常见错误总结
二十六、友元
1.为什么要使用友元
2.友元的两种使用形式
3.友元函数
3.1.使用全局函数作为友元函数
3.2.使用类的成员函数作为友元函数
4.友元类
4.1.为什么要使用友元类
4.2.友元类的作用
5.使用注意
二十七、运算符重载
1.为什么要使用运算符重载
2.运算符重载的基本用法
2.1.使用成员函数重载运算符
2.2.使用非成员函数【友元函数】重载运算符
2.3.两种方式的区别
3.运算符重载的禁区和规则
3.1.不能被重载的运算符
3.2.可以被重载的运算符
4.重载加减运算符+、-
5.重载复制运算符=
6.重载关系运算>、 类类型
10.类类型 => 普通类型
11.类类型 A => 类类型 B
二十八、常见错误总结
1.const 导致的异常 BUG
2.operator=的参数问题
二十八、多态
1.为什么要使用多态特性
2.实现多态:虚函数
2.1.虚函数的使用
2.2.虚函数的原理-虚函数表
2.3.final
2.4.override
3.遗失的子类析构函数
4.纯虚函数与抽象类
4.1.什么时候使用纯虚函数
4.2.纯虚函数的使用方法
4.3.纯虚函数的注意事项:
二十九、常见错误总结
三十、模版和容器
前言
1.C++函数模板的使用
1.1为什么要有函数模板
1.2.函数模板语法
1.3.函数模板定义形式
1.4.模板说明
1.5.函数定义
1.6.函数模板调用
1.7.模板函数
2.类模板的使用
2.1.为什么需要类模板
2.2.类模板定义
2.3.单个类模板的使用
2.4.继承中类模板的使用
2.5.类模板函数的三种表达描述方式
2.5.1.所有的类模板函数写在类的内部---上面已讲解--
2.5.2.所有的类模板函数写在类的外部,在一个cpp中
2.5.3.所有的类模板函数写在类的外部,在不同的.h和.cpp中
2.5.4.特殊情况友元函数
2.5.5.模板类和静态成员
2.6.类模板使用总结
2.7.类模板实战
三十一、异常处理机制
1.传统错误处理机制
2.异常处理基本语法
3.异常接口声明
4.异常类型和生命周期
4.1.throw基本类型
4.2.throw字符串类型
4.3.throw类对象类型异常
5.继承与异常
6.异常处理的基本思想
7.标准程序库异常
三十二、STL标准模板库
1.容器
1.1.Vector容器
Vector容器概念
vector对象的构造
vector的赋值
vector末尾的添加移除操作
vector的数据存取
vector的插入
vector的删除
1.2.deuqe容器
deque容器概念
deque对象的默认构造
deque对象的带参数构造
deque头部和末尾的添加移除操作
deque的数据存取
deque与迭代器
deque的赋值
deque的插入
deque的删除
1.3.List容器
List 容器概念
list对象的默认构造
list对象的带参数构造
list头尾的添加移除操作
list的数据存取
list与迭代器
list的赋值
list的大小
list的插入
list的删除
list的反序排列
C++11新特性 变参模板、完美转发和emplace
1.4.Set和multiset容器
set/multiset容器概念
set/multiset对象的默认构造
Set/multiset 对象的带参构造函数
set对象的拷贝构造与赋值
仿函数(函数对象)functor的用法
set的插入和pair的用法
set与迭代器
set/multiset的大小
set/multiset的删除
set/multiset的查找
1.5.Map和multimap容器
map/multimap的简介
map/multimap对象的默认构造
map和multimap对象的带参数构造
map的插入与迭代器
map/multimap 排序
map对象的拷贝构造与赋值
map的大小
map的删除
map/multimap的查找
1.6.Queue容器
Queue简介
queue对象的默认构造
queue 对象的带参构造
queue的push()与pop()方法
queue对象的拷贝构造与赋值
queue的数据存取
queue的大小
1.7.优先级队列priority_queue
1.8.stack容器
stack对象的默认构造
1.9.STL常见疑难杂症
1.10.Array容器
array容器概念
array对象的构造
array的大小
array的数据存取
一、面向对象的思想
面向过程: 什么是面向过程? 根据程序的执行过程,来设计软件的所有细节。 面向过程的缺点 : 开发大型项目时,越来越难以把控,甚至失去控制。 后期维护、更新成本很大。 解决方案: 使用面向对象。 什么是面向对象? 不是面向对象,写代码:
面向对象是一种开发思想,一种全新的开发方式。
面向对象思想的重要性:
开发大型项目必备,是高级程序员的必备技能!
二、类的使用
面向对象编程,最重要的第一个概念:类
“人类”是一个抽象的概念,不是具体的某个人。
“类”,是看不见,摸不着的,是一个纯粹的概念.
“类”,是一种特殊的“数据类型”,不是一个具体的数据。
注意:类, 和基本数据类型(char/int/short/long/long long/float/double)不同类的构成:方法和数据
1.类的构成
2.类的设计
定义一个“人类”:
Demo #include #include #include using namespace std; // 定义一个“人类” class Human { public: //公有的,对外的 void eat(); //方法, “成员函数” void sleep(); void play(); void work(); string getName(); int getAge(); int getSalary(); private: string name; int age; int salary; }; void Human::eat() { cout