导图社区 核心编程
C++核心编程知识框架总结,包括内存、引用、函数进阶、类和对象、文件操作等等,有助于帮助您熟悉知识要点,加强记忆。
社区模板帮助中心,点此进入>>
互联网9大思维
组织架构-单商户商城webAPP 思维导图。
域控上线
python思维导图
css
CSS
计算机操作系统思维导图
计算机组成原理
IMX6UL(A7)
考试学情分析系统
核心编程
内存
代码区
放代码
全局区
存放全局变量,静态变量,部分常量
栈区
函数的参数值,局部变量
堆区
程序员分配,释放
new
delete
引用
给一个变量起别名,改变别名的值,变量本身也会改变
引用必须初始化,初始化后就不可以改变
使用引用做函数参数
在函数改变形参时,实参也会改变
本质:指针常量
常量引用:一般用于修饰函数形参,防止误操作
函数进阶
函数可以有一个默认值
占位参数
在定义时不赋值
在使用调用时必须赋值
函数重载
同一作用域
函数名称相同
函数参数的类型不同或个数不同或顺序不同
注意事项
利用引用只可以引用合法的内存空间
const int&a与int&a
传值常数和变量
默认参数
默认参数加普通 与 普通
无法重载,有二义性
类和对象
封装
将一些属性,行为进行封装
class
访问权限
public
类内类外都可以访问
protect
类内可以访问,类外不可以访问
派生类可以访问
private
派生类不可以访问
与struct的区别
默认权限不同
class默认权限为私有
struct默认权限为公共
继承
拥有相同特性
基类(父类)
派生类(子类)
class 子类:继承方式 父类
公共继承public
权限不变
保护继承protect
权限变为保护
私有继承private
权限变为私有
子类在继承父类后私有属性也继承,不过无法显示会被隐藏
子类不可以访问父类的私有成员
构造与析构的顺序
父类构造 --- 子类构造 --- 子类析构 --- 父类析构
子类与父类同名
不加作用域是子类
加了作用域是父类
如果子类中出现和父类中同名函数,子类的同名成员会隐藏父类所有的成员函数
如果想访问父类的成员函数必须加作用域
静态成员与非静态成员出现同名,处理方法一致
多继承
语法
class 子类: 继承方式 父类1 , 继承方式 父类2 , ..................
如果父类中出现同名成员,需要加作用域区分
菱形问题
最终子类在使用中间类使,会出现二义性
方法:在最终父类的继承数据前面加 virtual 使其成为虚继承,此时最终父类被称为虚基类
多态
静态多态
运算符重载
函数地址早绑定 --- 编译阶段就确定函数地址
动态多态
要求
有继承关系
重写父类的虚函数
重写: 返回值类型 函数名 参数列表 完全相同
用法
使用父类的指针或引用,来使用子类的对象
纯虚函数和抽象类
无法实例化
子类必须重写父类的抽象类,否则子类也属于抽象类
虚析构和纯虚析构
可以解救父类指针释放子类对象
有具体函数实现
纯虚析构是抽象类,无法实例化对象
父类虚析构 virtual 父类虚构函数
函数地址晚绑定 --- 运行阶段才确定函数地址
对象
构造函数
默认构造(无参构造)
有参构造
拷贝构造
浅拷贝(默认)
深拷贝(在使用拷贝构造函数时,使其new一下,申请空间)
析构函数
静态成员
变量
所有对象共存一份数据
在编译阶段分配内存
类内声明,类外初始化
函数
所有对象共享一个函数
静态成员函数只能访问静态成员变量
访问方式
通过对象
person p; p.fun()
通过类
person::fun()
成员变量与成员函数分开存储
非静态成员变量才属于类的对象上
this指针
指向自己
不需要定义,直接使用
返回自身可以用 *this
空指针可以访问成员对象
this不可以指向空指针
不要传空指针
const修饰成员函数
常函数
成员函数后加上const->常函数
常函数不可以修改成员属性
在成员属性声明时加上 mutable 后在常函数中可以修改了
常对象
在对象前加入const
常对象只能调用常函数
友元函数
frind
友元可以访问类中的私有成员
语法: friend ........
重定义运算符,使运算符认识你要干什么
加、减、乘、除
左移、右移“<<”“>>”
返回值返回自己可以实现“连起来”
递增、递减 “++”“--”
赋值“=”
关系“==”
函数调用“()”
仿函数
文件操作
#include <fstream>
文本文件
写文件ofstream
写文件
ios::out
以追加的方式写文件
ios::app
如果文件存在,先删除在创建
ios::trunc
读文件ifstream
读文件
ios::in
从文件末尾开始读
ios::ate
读写文件fstream
二进制文件
ios::binary
ostream& write(const char * buffer,int len)
istream& read(char * buffer,int len)
字符指针buffer指向内存中的一段存储空间。len是字节数