
C++完全学习
本专题记录了C++学习从C到C++,面向对象,泛型模板,设计模式,代码优化五部分的学习笔记
big__C
小白
展开
-
【从C到C++】------- 命名空间
目录命名空间的引入namespace的初级定义和使用1、同一文件内定义和使用命名空间2、不同C文件间定义和使用命名空间3、默认命名空间4、匿名命名空间的定义和使用5、嵌套命名空间的定义和使用命名空间的引入1、C语言如何解决名称冲突(1)大项目中会有很多C文件,项目中的全局变量和函数理应能互相访问,因此名称冲突是客观存在。(2)C中解决名称冲突的办法是:第一:同一个C文件不要太大,由一个人写;第二:每个C文件(或几个C文件构成的一个模块)中所有全局变量和函数前加统一的唯一前缀;第三:不需要文原创 2020-05-21 23:46:24 · 376 阅读 · 0 评论 -
【从C到C++】------- C++基本编程
目录1.C++标准库介绍2.iostream的cout使用3.iostream的cin使用4.C++用fstream读写文件5.C++字符串string类使用1.C++标准库介绍【1】C++是C的超集一个典型C程序(后缀名.c)可以完全被视为C++程序来编译C程序可以通过__cplusplus符号是否预定义来判断当前是gcc还是g++编译 __cplusplus的值是long int类型的,值表示当前编译程序的C++编译器的版本号。一个典型C++程序(后缀名.cpp)只能当C++程序来编译,原创 2020-11-17 19:01:54 · 405 阅读 · 0 评论 -
【从C到C++】------- C和C++混合编程之 extern “C“
一,C++标准库介绍1、C++是C的超集一个典型C程序(后缀名.c)可以完全被视为C++程序来编译。C程序可以通过__cplusplus符号是否预定义来判断当前是gcc还是g++编译 ,__cplusplus的值是long int类型的,值表示当前编译程序的C++编译器的版本号。一个典型C++程序(后缀名.cpp)只能当C++程序来编译,不能用C编译器来编译,可见C++是C的超集。C++文件名的常用后缀:源文件(.cpp .cxx .cc .c .c++),头文件(.hpp .hxx .h).原创 2020-11-18 16:25:07 · 286 阅读 · 0 评论 -
【从C到C++】------- C++的4种cast转换
C++的4种cast转换1、static_cast(1)源生类型之间的隐式类型转换,可以用static_cast来明确告知编译器,避免警告,转换后可能丢失精度,正确性需要程序员自己保证(2)用来将void *p转为具体的指针类型,取回原有的指针类型(3)用于类层次结构中父类和子类之间指针和引用的转换。其中上行转换时安全的,而下行转换时不安全的。(4)总结:static_cast<>()是编译时静态类型检查,使用static_cast可以尽量发挥编译器的静态类型检查功能,但是并不能保.原创 2020-11-19 14:14:17 · 349 阅读 · 0 评论 -
【从C到C++】------- C++的引用
4.C++新增的引用1、引用介绍(1)引用的经典案例:实现swap函数实战#include <iostream>using namespace std;void swap1(int a, int b);void swap2(int *pa, int *pb);void swap3(int &pa, int &pb);int main(void){ int x = 4, y = 6; swap1(x, y); swap2(&x, &a.原创 2020-11-19 13:52:04 · 215 阅读 · 0 评论 -
【从C到C++】------- C++新增和有变化的关键字
目录1.C++的bool关键字2.C++的字符类型char3.C++中无变化关键字和运算符代用关键字4.C++新增的引用5.C++的enum枚举6.C++的共用体union7.inline关键字8.C++11引入的nullptr9.使用静态断言10.C++内存对齐alignas和typeidC++的4种cast转换C++的自动类型推导C++类与面向对象C++中static和this关键字C++面向对象的其他关键字C++的const关键字const有关的其他几个关键字模板编程的几个关键字C++的异常处理机制1原创 2020-05-24 23:53:56 · 974 阅读 · 0 评论 -
【从C到C++】------- C++的内存管理
目录为什么要研究内存管理C++可用内存区域智能指针的简单引入Java的垃圾回收机制介绍为什么要研究内存管理1、程序就是数据加算法(1)写程序是为了解决某个问题,生活中的问题最终被计算机抽象为控制或运算(2)CPU中的主要构件就是运算器和控制器,本质上是一堆组合逻辑电路,表现为机器指令集(3)一个问题对应一个程序,一个程序分为多个函数,一个函数分为多个机器指令(4)存储机器指令需要内存,机器指令的执行过程需要内存参与,这是内存的2大作用(5)算法对应机器指令(ROM内存),数据对应RAM内存原创 2020-05-25 14:53:24 · 277 阅读 · 0 评论 -
【C++的面向对象】------- C++的构造函数和析构函数详解
目录一,典型的C++面向对象编程二,C++的构造函数和析构函数在构造和析构函数中使用动态内存构造函数与类的成员初始化拷贝构造函数的引入浅拷贝与深拷贝一,典型的C++面向对象编程1、三要素(1)头文件hpp中类的定义(2)源文件cpp中类的实现(构造函数、析构函数、方法)(3)主程序2、案例(1)用C++来编程“人一天的生活”(2)“人”的属性:name、age、male(3)“人”的方法:eat、work(coding/shopping)、sleep(4)人的生活:eat->wor原创 2020-06-28 12:22:28 · 717 阅读 · 0 评论 -
【C++的面向对象】------- 类成员的访问权限
public,private,protect的访问权限问题(先不考虑继承和多态的关系)1、public访问权限是全局的public的成员变量在类的成员方法中可以直接访问public的成员变量在外部代码中可以通过类的对象来直接访问public的成员方法在类内其他成员方法中可以直接调用public的成员方法在外部代码中可以通过类的对象来直接访问2、private访问权限就是对内不设防,对外设防的private的成员变量在类的成员方法中可以直接访问.原创 2020-06-30 16:58:18 · 2358 阅读 · 0 评论 -
【C++的面向对象】------- const和mutable的暧昧
1、const可以实现常函数(1)常函数,就是class的成员函数承诺在函数内部不会修改class的任何成员变量,注意是任何一个(2)常函数演示案例#include <string>#include <iostream>using namespace std;/*****************定义一个类***********************/class person{public: string name; // 名字 bool male;原创 2020-07-03 11:29:06 · 231 阅读 · 0 评论 -
【C++的面向对象】------- 继承体系下子类和父类的关系和权限管控
目录什么是面向对象的继承C++继承中的权限管控什么是面向对象的继承【1】类的继承案例基类为:person,派生类为man,所有权限均为public演示1:派生类“继承”了基类的成员变量演示2:派生类“继承”了基类的成员方法/*----------person.hpp-----------*/#ifndef __PERSON_HPP__#define __PERSON_HPP__#include <string>using namespace std;cla原创 2020-11-24 15:30:49 · 650 阅读 · 1 评论 -
【C++的面向对象】-------C++ 的继承特性
目录1.派生类和基类的构造析构关系2.派生类和基类的同名成员问题3.子类和父类的类型兼容规则4.继承的优势与不良继承5.组合介绍以及与继承对比1.派生类和基类的构造析构关系【1】派生类并不继承基类的构造和析构函数,只继承成员变量和普通成员方法不继承,意思是派生类中确实没有,不包含基类的构造和析构函数派生类自己有自己的构造和析构,且构造和析构的规则和之前讲过的完全一样研究构造和析构函数时,一定要注意默认规则【2】派生类的构造函数一定会调用基类的构造函数,析构也一样 代码验证:在基类和派原创 2020-11-24 20:36:00 · 504 阅读 · 0 评论 -
【C++的面向对象】-------C++中的多态特性
15.多继承及其二义性问题1_22.3.14.1、多继承(1)多继承就是一个子类有多个父类(2)多继承演示(3)多继承和单继承的原理,效果并无明显区别(4)多继承会导致二义性问题2.3.14.2、多继承的二义性问题1(1)场景:C多继承自A和B,则C中调用A和B的同名成员时会有二义性(2)原因:C从A和B各自继承了一个同名(不同namespace域)成员,所以用C的对象来调用时编译器无法确定我们想调用的是哪一个(3)解决办法1:避免出现,让A和B的public成员命名不要重复冲突。但这个有原创 2020-11-25 16:38:36 · 223 阅读 · 0 评论 -
【C++的面向对象】-------运算符重载
目录1.运算符重载引入2.理解运算符重载的关键点3.运算符重载函数中的细节4.赋值运算符重载函数返回引用预处理符号1.运算符重载引入【1】从函数重载说起函数重载是在一定作用域内,多个函数名相同但参数列表不同的函数重载编译时由编译器根据实际调用时给的实参情况来判定本次实际用哪个函数,这个过程叫重载决策重载函数本质上就是多个独立函数,重载机制在编译时发生,运行时不参与函数重载的意义就是避免我们胡乱起名,方便编写类库覆盖所有可能操作,是一种语法糖【2】什么是运算符重载什么是运算符?譬如+原创 2020-11-27 15:59:23 · 344 阅读 · 0 评论 -
【C++的面向对象】-------C++的静态成员
目录1.类的静态成员2.静态成员的深度理解3.静态成员的用途1.类的静态成员【1】static关键字 C语言中有2种用法:static修饰局部变量和全局变量,含义完全不同static用来修饰局部变量,形成静态局部变量。静态局部变量和非静态局部变量的本质区别是存储类不同,非静态局部变量分配在栈上,而静态局部变量分配在数据段/bss段上。static用来修饰全局变量,形成静态全局变量。静态全局变量和非静态全局变量的区别是在链接属性上不同。我们将明显不会在其他c文件中引用(只在当前c文件中引用)的原创 2020-11-30 22:23:46 · 234 阅读 · 0 评论 -
【C++的面向对象】------- C++的友元函数和友元类
目录1.什么是友元函数2.友元函数的第二种实现3.友元类4.关于友元函数1.什么是友元函数【1】外部函数访问类内成员写一个Person类,内部有private、protected、public的三类访问权限的成员写一个外部函数disp_info来打印这三类成员#include <iostream>using namespace std;class person{public: int age; person(){}; person(int age,int hei原创 2020-12-13 17:08:37 · 408 阅读 · 0 评论 -
【STL和泛型编程】------- 顺序容器array
目录1.STL的容器类介绍2.容器类array的基本使用1.STL的容器类介绍【1】何为容器顾名思义,容器就是盛放东西的东西,这里被盛放的一般是数据对象,用来盛放的是容器类计算机中一切皆是数据,数据存储只能在内存中,而容器类是用做容器的内存的管理方法容器类的内核就是:数据结构 + 算法C语言语法内置的数组和结构体,就是语言源生支持的容器C++容器通过类库方式提供,容器类库被模板技术泛化后,就是STL容器了。可见STL的本质其实就是一套模板技术泛化类型的C++基本数据结构和算法类库【2原创 2020-12-17 19:55:10 · 227 阅读 · 0 评论 -
【STL和泛型编程】------- 迭代器
目录1.迭代器的引入2.迭代器的几个细节问题3.STL的不同类型迭代器1.迭代器的引入【1】迭代器是干嘛的迭代器就是能通过移动来遍历处理容器的一种机制C语言中遍历数组元素,用指针*p++方式,指针变量就可以说是底层的遍历迭代器【2】关于迭代器每种容器理论上都可以被遍历,不存在不能被遍历的容器每种容器的遍历实现都可能不同,要结合容器和元素的特点来具体实现迭代器内部原理肯定是通过指针操作(地址运算)来实现迭代器就是C++为我们设计的一个高层次的“指针”,高层指针是面向容器中的元素的原创 2020-12-26 14:05:13 · 348 阅读 · 0 评论