title: C++ 外围编程
categories:
- [C++]
tags:
- [编程语言]
date: 2021/03/11
作者:hackett
微信公众号:加班猿
内存散布模型
- 堆区:new/delete,由程序员调配和开释,若程序员不开释,程序完结由操作系统回收
- 栈区:寄存函数的参数值,局部变量等;由编译器主动调配开释
- 动态存储区:寄存全局动态变量、部分动态变量、全局变量以及虚函数表
- 常量存储区:全局常量、函数指针、常量数组、对函数指针
- 代码区:寄存函数体的二进制代码
援用
- 必须初始化,初始化后不可扭转
- 常量援用润饰形参
- 实质是一个指针常量
函数
- 默认参数(语法:返回值类型 函数名(参数 = 默认值){})
- 函数占位参数(语法:返回值类型 函数名(数据类型))
- 函数重载:
- 同一作用域下
- 函数名雷同
- 函数参数类型不同 / 个数不同 / 程序不同
构造函数
能够有参数,因而能够产生重载
调用对象时主动调用结构,无需手动调用,而且只会调用一次
调用规定
如果用户定义有参构造函数,c++ 不在提供默认无参结构,然而会提供默认拷贝结构
如果用户定义拷贝构造函数,c++ 不会再提供其余构造函数
虚析构和纯虚析构
虚析构
语法:virtual ~ 类名 (){}
纯虚析构
语法:virtual ~ 类名 () = 0; 抽象类,无奈实例化对象
共性
解决父类指针开释子类对象
都须要有具体的函数实现
深 / 浅拷贝
浅拷贝:简略的复制拷贝操作
深拷贝:在堆区从新申请内存,进行拷贝操作;属性有在堆区开拓的,肯定要本人提供拷贝构造函数,避免浅拷贝带来的反复开释堆区问题
初始化列表
语法:构造函数():属性 1(值 1),属性 2(值 2),属性 3(值 3)…
动态成员
动态成员变量
所有对象共享同一份数据
在编译阶段分配内存
类内申明,类外初始化
动态成员函数
所有对象共享一个函数
动态成员函数只能拜访动态成员变量
this 指针
定义
this 指针指向被调用的成员函数所属的对象
this 指针是隐含每一个非动态成员函数内的一种指针
用处
形参和成员变量同名时,能够用 this 指针来辨别
在类的非动态成员函数中返回对象自身,可应用 return *this
const
常函数
const 在成员函数后:void func() const{}
常函数内不能够批改成员属性
成员属性申明前加 mutable 关键字,在常函数中仍然可批改
常对象
const 在申明对象前
常对象只能调用常函数
友元 friend
作用:让一个类或者函数拜访另一个类中的公有成员
全局函数
类
成员函数
运算符重载
加号
实现两个自定义数据类型相加
左移
能够输入自定义数据类型(配合友元)
递增
实现本人的整型数据(前置递增返回援用,后置递增返回值)
赋值
类中有属性指向堆区,做赋值操作时也会呈现深浅拷贝问题
关系
让两个自定义数据类型对象进行比照操作
函数调用
应用形式十分像函数的调用,因而称为仿函数,没有固定写法,非常灵活
继承
继承形式
public
继承下来的成员属性放弃不变
protected
继承下来的成员属性变为 protected
private
继承下来的成员属性变为 private
对象模型
父类公有成员被子类继承下来,被编译器暗藏后拜访不到
结构和析构程序
先调用父类的构造函数,再调用子类的构造函数,析构是先调用子类的析构函数,再调用父类的析构函数
同名成员 / 动态成员解决
拜访子类:间接拜访
拜访父类:加作用域
多态
满足条件
有继承关系
子类重写父类中的虚函数
动态多态
函数重载和运算符重载属于动态多态,复用函数名
函数地址早绑定 — 编译阶段确定函数地址
动静多态
派生类和虚函数实现运行时多态
函数地址晚绑定 — 运行阶段确定函数地址
应用条件
应用 父类指针 / 援用 指向子类对象,不能应用对象
纯虚函数和抽象类
语法:virtual 返回值类型 函数名(参数列表)= 0
特点
无奈实例化对象
子类必须重写抽象类中的纯虚函数,否则也属于抽象类
文件
文本文件
写文件:ofstream 或者 fstream 类
读文件:ifstream 或者 fstream 类
二进制文件
写文件:ostream& write(const char * buffer,int len);
读文件:istream& read(char *buffer,int len);
模板
函数模板
作用:建设一个通用函数,函数的返回值类型和形参类型能够不具体制订,用虚构的类型来示意
语法:template<typename T> 函数申明或定义
调用规定
如果函数模板和一般函数都能够实现,优先调用一般函数
如果函数模板能够产生更好的匹配, 优先调用函数模板
能够通过空模板参数列表来强制调用函数模板
函数模板也能够产生重载
类 模板
作用:建设一个通用函数,类中的成员数据类型能够不具体制订,用虚构的类型来示意
语法:template<typename T> 类
创立机会
一般类中的成员函数一开始就能够创立
类模板中的成员函数在调用时才创立
如果你感觉文章还不错,记得 ” 点赞关注 “
关注我的微信公众号【 加班猿 】能够获取更多内容