UML 统一建模语言

一、用例图 用例代表系统的某项完整功能 从客户角度来描述系统功能 包括参与者、用例、关系 1. 泛化关系 Generalization 父类和子类的关系 2. 包含关系 Include 一个功能肯定会使用另一个功能 3. 扩展关系 Extend 完成某个功能的时候偶尔会执行另一个功能 二、类图 用来显示系统中的类,接口以及它们之间的关系 1. 泛化关系 Generalization(is a) 一种类与类之间的继承关系 2. 实现关系 Realization(is a) 类与抽象类之间的实现关系 3. 依赖关系 Dependence(use a) 两个相对独立的系统,一个系统负责构造另一个系统的实例,或者依赖另一个系统的服务 类 A 做为类 B 方法的形参,而不是类 B 的成员属性 4. 关联关系 Directed Association 两个相对独立的系统,一个系统的实例与另一个系统的一些实例存在固定的对应关系 聚合 Aggregation 聚合关系是关联关系的一种,是更强的关联关系 聚合是整体和部分之间的关系,例如汽车由引擎、轮胎以及其它零件组成 聚合关系也是通过成员变量来实现的,但是,关联关系所涉及的两个类处在同一个层次上,而聚合关系中,两个类处于不同层次上,一个代表整体,一个代表部分 整体与部分之间是可分离的,它们可以具有各自的生命周期,部分可以属于多个整体对象,也可以为多个整体对象共享 组合 Composition 三、对象图 四、时序图 五、活动图

January 29, 2022 · 1 min · Rick Cui

函数对象适配器

仿函数适配器 bind1st、bind2nd 将二元仿函数转为一元仿函数 仿函数适配器 not1、not2 仿函数适配器 ptr_fun 将普通函数转为函数对象,然后就可以与其它仿函数适配器一起使用了 仿函数适配器 mem_fun、mem_fun_ref 将成员函数转为适配器 class MyPrint : public binary_function<int, int, void>{ public: void operator()(int v, int val) const{ cout << "v: " << v << ", val: " << val << ", v + val: " << v + val << endl; } }; void myPrint(int v, int val){ cout << v + val << " "; } class MySort: public binary_function<int, int, bool>{ public: bool operator() (int lhs, int rhs)const{ return lhs > rhs; } }; class MyGreater: public unary_function<int, bool>{ public: bool operator()(int v)const{ return v > 50; } }; void printVec(const vector<int> &v){ for(const auto &p : v){ cout << p << " "; } cout << endl; } class Person{ public: Person(int id, int age):id(id), age(age){} void show(){ cout << "id: " << id << ", age: " << age << endl; } int id; int age; }; int main(){ vector<int> v; for(int i = 0; i < 10; ++i){ v....

January 27, 2022 · 2 min · Rick Cui

C++ 沉思录笔记

有的情况下,现在的折衷方案比未来的理想方案好得多 我考虑问题的本质是什么,再定义一个类抓住这个本质,并确保这个类能独立地工作。然后在遇到符合这个本质的问题时就使用这个类。 只要类定义正确,我就只能按照我编写它的初衷那样去用它。 C++ 哲学:抽象,实用,只为用到的东西付出代价。 类设计者的核查表: 你的类需要一个构造函数吗? 你的数据成员是私有的吗?(使用函数,可以延迟计算,不必时时计算,保证数据成员的准确性) 你的类需要一个无参的构造函数吗?(对象数组) 是不是每个构造函数初始化所有的数据成员? 类需要析构函数吗? 类需要一个虚析构函数吗? 你的类需要复制构造函数吗?(是否需要深拷贝) 你的类需要一个赋值操作符吗? 你的赋值操作符能正确地将对象赋给对象本身吗? 你的类需要定义关系操作符吗? 删除数组时你记住了用 delete[] 吗? 记得在复制构造函数和赋值操作符的参数类型中加上 const 了吗? 如果函数有引用参数,它们应该是 const 引用吗? 记得适当地声明成员函数为 const 的了吗? 代理类:用类来表示概念(RAII) class Vehicle{ public: virtual double weight() = 0; virtual void start() = 0; virtual Vehicle* copy() const = 0; virtual ~Vehicle(){} }; class RoadVehicle: public Vehicle{ /* ....

January 26, 2022 · 3 min · Rick Cui

机房预约系统案例

January 24, 2022 · 0 min · Rick Cui

switch 与 if Else 区别

while 循环中的 switch, break 只能中断 switch,不能中断 while 循环 void managerMenue(){ while(true){ cout << "这是子菜单" << endl; cout << "是否返回主菜单?" << endl; cout << "1 是" << endl; cout << "2 否" << endl; int i = 0; cin >> i; switch(i){ case 1: break; case 2: return; default: break; } // if(i == 1){ // // system("reset"); // break; // } // else if(i == 2){ // return; // } // else{ // cout << "输入有误,请重新输入" << endl; // } } cout << "这是子菜单循环外代码" << endl; } int main() { while(true){ cout << "欢迎登陆!" << endl; cout << "这是主菜单" << endl; cout << "请输入选项:" << endl; int i = 0; cin >> i; // switch(i) // { // case 1: // system("reset"); // managerMenue(); // break; // case 2: // break; // } if(i == 1){ // system("reset"); managerMenue(); // break; } else{ break; } cout << "switch 外代码" << endl; } cout << "while 外代码" << endl; return 0; }

January 24, 2022 · 1 min · Rick Cui