c++ 概述
void的用法:1.限定无参数,2.void*定义通用指针指向任意类型的数据c++内存空间有四个:代码区,全局变量与静态变量区,局部变量区,动态存储区----时刻不能忘
malloc在分配的时候不进行初始化,因此需要显式调用构造函数,new分配的同时进行初始化,即使后面没有跟括号和初始化参数。
内联函数的好处:利于结构化编程的同时避免函数调用开销
函数重载根据参数类型和个数实现函数的匹配,如果完全一样就会不能够识别,产生二义性
类和对象
面向对象和面向过程程序设计的区别:面向对象:对象 = 数据结构 + 算法
程序 = 对象 + 对象 + 对象 。。。。
面向过程:程序 = 数据结构 + 算法
多态:静态多态:函数重载,动态多态:虚函数
消息:包括 接受对象,消息名称,消息参数。
this指针:用来区分是哪个对象的成员函数(因为所有对象的成员函数都是放一块的)
对象成员的引用:如果是引用,或者对象名,用“.”,如果是指针,用“->”
默认构造函数:无参,不做任何工作,相当于空函数,需要做初始化工作的构造函数需要自己定义,定义以后覆盖默认构造函数
构造函数可重载,析构函数不能重载
拷贝构造函数的用处:1.用对象初始化对象,2.对象作为函数实参,3. 对象作为返回值返回临时对象
浅拷贝与深拷贝是针对分配了堆空间的对象而言的
堆对象和对象数组:
静态成员用类名和::来访问
友元函数有两种:普通友元函数和友元成员函数,是可以操作本类成员的非本类函数
友元类:一个类的所有成员函数都是另一个类的友元函数
继承与派生
访问权限多重继承中调用不同基类相同成员时产生的二义性问题的解决办法:
1.使用::
2.使用加壳的办法(同名函数覆盖)
多重继承中调用公共基类相同成员时产生的二义性问题的解决办法:使用虚基类(在派生过程中与派生类一起维护同一个内存拷贝)
多态性和虚函数
虚函数表虚析构函数的意义:基类指针调用delete删除派生类对象
运算符重载
两种方式:重载为成员函数,重载为友元常见的运算符重载:
类型 operator++();//前缀
类型 operator++(int);//后缀
类型 operator[](形参表);
类型 operator==();//还有>或<
operator 类型名();//类型转换运算符重载
friend ostream operator<<(istream& , classname&);
friend istream operator>>(istream& , classname&);
流与类库
格式控制随机访问
文件操作
模板
函数模板类模板
派生和类模板的组合技术:从类模板派生类模板,从类模板派生非类模板,从非类模板派生类模板
异常和断言
异常处理模式:终止模式,恢复模式异常规格说明:
返回类型 函数名 (参数表) throw (类型列表);
返回类型 函数名 (参数表) throw ();
返回类型 函数名 (参数表) ;
断言:
前置条件断言,后置条件断言,前后不变断言;
使用:
#include <assert.h>
void assert (int expression_r_r_r);
STL
容器,迭代器,函数对象,通用算法容器:类模板
迭代器:输入迭代器,输出迭代器,前向迭代器,双向迭代器,随机存取迭代器
算法分类:查找,排序,数值计算,比较,集合,容器管理,统计,堆操作
另一种分类:修正算法,非修正算法,排序算法,数值计算算法
类的设计原则
单一职责原则:一个类制作一件事,且只有一个引起它变化的原因依赖倒置原则:与特定业务有关的依赖关系硬尽量依赖接口和抽象类,而非具体类,具体类只负责业务实现,修改具体类不影响依赖关系
开放-封闭原则(OCP):一个模块在扩展性方面应该是开放的,而在可更改性方面应该是封闭的,因此在进行面向对象设计时,尽量考虑接口封装机制,抽象机制和多态技术。
Liskov替换原则(LSP):子类应当可以替换父类,并出现在任何父类能够出现的地方。
接口分离原则:把功能实现在接口中,而不是在类中,使用多个专门的接口比使用单一的总接口好。
设计模式:
单例设计模式:一个类仅有一个实例,并提供一个访问它的全局访问点。适配器设计模式:将一个类的接口转换成客户希望的另外一个接口。
组合设计模式:将对象组合成树形结构,以表示“部分-整体”层次结构。
命令设计模式:将一个请求封装成为一个对象,从而使我们可以用不同的请求对客户进行参数化。(对命令进行封装,从而把发出命令的责任和执行命令的责任分割开,并委派给不同对象)
策略设计模式:定义一系列的算法,把他们一个个封装起来,并且使他们可以相互替换。
责任链(审批)设计模式:通过一条隐式的对象消息链传递处理请求,直到有个对象处理它为止。
修饰设计模式:动态地给一个对象添加一些额外的职责,比生成子类更灵活。
面向对象
对象,类,属性,方法,封装,继承,消息,结构与关联,多态面向对象模型:类对象模型(数据结构),动态模型(状态,出发状态转换的事件,对象行为),功能模型(即用例模型,外部执行者所理解的系统功能)
面向对象开发过程:需求分析,特定领域类分析,动态交互建模
面向对象设计过程:子系统划分,系统体系结构设计(典型架构:表示层,业务逻辑层,数据访问层),对象设计与优化(使用模式设计对象,接口规格说明,对象模型重构,对象模型优化),持久对象设计(存储机制:对象数据库,关系数据库,其他(普通文件,XML文件))
UML图
用例图类图
顺序图
协作图
状态图
活动图
组件图
部署图