工厂模式
工厂模式C++工厂模式的模板,包含简单工厂、工厂方法和抽象工厂三种常见的实现方式。
1. 简单工厂模式模板123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657#include <iostream>#include <memory>#include <string>// 产品基类class Product {public: virtual ~Product() = default; virtual void operation() = 0;};// 具体产品Aclass ConcreteProductA : public Product {public: void operation() override { std::cout << "ConcreteProductA operation" & ...
模板模式
模板模式12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273// TemplateMethod.h#ifndef TEMPLATE_METHOD_H#define TEMPLATE_METHOD_H// 抽象基类,定义模板方法class AbstractClass {public: virtual ~AbstractClass() = default; // 模板方法,定义算法骨架 void templateMethod() { stepOne(); stepTwo(); stepThree(); if (hookMethod()) { stepFour(); } } protected: ...
策略模式
C++策略模式的模板实现:
策略模式基本模板1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071#include <iostream>#include <memory>// 1. 定义策略接口class Strategy {public: virtual ~Strategy() = default; virtual void execute() = 0;};// 2. 具体策略实现class ConcreteStrategyA : public Strategy {public: void execute() override { std::cout << "执行策略 A" << std::endl; }};cl ...
观察者模式
123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147#include <iostream>#include <vector>#include <algorithm>#include <memory>// 抽象观察者接口class Observer {public: virtual ~Observer() = defaul ...
设计模式理论基础
类间关系+:可见(public)-:自身访问(private)#:继承可见(protected)友元:其他函数可以访问该类的私有成员抽象类:抽象类不能被实例化,只能被继承。纯虚函数:抽象类中的抽象函数。虚函数:子类重写父类的函数。
关系分类1、接口实现关系,商品售价,uml图为虚线,空心三角形2、继承泛化关系,动物和狗,猫,uml图为实线,实心三角形3、不可分离的组合关系,人的身体,头,手,腿,uml图为实线,实心三角形4、可分离的组合关系,老师学生,老师和学生,uml图为实线,空心三角形5、关联关系,人的身份证和人,也有双向关联的关系,双向关联为实现,没有箭头,单向关联为实线,有箭头6、依赖关系,人需要身份证,人依赖身份证,uml图为虚线,有箭头
linuxCpp
1、c++对c的扩展1-1、冒号作用域:: 运算符是一个作用域,::代表是全局作用域。
1234567891011121314#include <iostream>using namespace std;int a = 100;void test01(){ int a = 10; cout << a << endl;//输出局部变量a cout << ::a << endl;//输出全局变量a}int main(){ test01(); return 0;}
1-2、名字控制1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677#include <iostream>using namespace std;names ...
c++ explicit 关键字
c++ explicit 关键字用法:12345678910111213141516171819class A { explicit A(int a) {}}A a(1);错误:A a = 1;错误:A a(1, 2);错误:A a = {1, 2};错误:A a{1, 2};错误:A a = (A)1;错误:A a = (A){1, 2};
这样在创建对象的时候,只能使用显式的方式创建,不能使用隐式的方式创建。这样可以避免一些不必要的错误。对创建对象的方式进行限制。
文件操作
C++ 文件与目录操作完整笔记一、文件操作基础1.1 文件流类型
ifstream - 输入文件流,用于从文件读取数据
ofstream - 输出文件流,用于向文件写入数据
fstream - 文件流,支持读写操作
1.2 文件打开方式
构造函数方式:1ifstream file("filename.txt");
open() 方法:12ofstream file;file.open("filename.txt");
1.3 文件读取操作
getline() - 读取一行
read() - 二进制读取
>> 操作符 - 格式化读取
get() - 读取单个字符
1.4 文件写入操作
<< 操作符 - 格式化写入
write() - 二进制写入
put() - 写入单个字符
1.5 文件状态检查
is_open() - 检查文件是否打开
eof() - 检查是否到达文件末尾
good() - 检查流状态是否正常
1.6 文件打开模式
ios::in - 输入模式
ios::out - 输出模式
ios::app - ...
c和c++混合编译
c和c++混合编译一定要用extern “C”{}括起来, 否则会发生一些莫名奇妙的错误。如链接未定义等。
decltype 关键字--泛型编程
decltype 关键字1. 定义decltype是C++11引入的一个关键字,用于在编译时确定表达式的类型。它可以用于推导变量的类型,或者用于定义函数的返回类型。
2. 用法decltype关键字通常用于推导变量的类型,或者用于定义函数的返回类型。
12345678910int x = 10;decltype(x) y = 20; // y的类型为intauto func(int a, int b) -> decltype(a + b) { return a + b;}decltype(func(1, 2)) z = func(1, 2); // z的类型为intdecltype(auto) w = x; // w的类型为int&decltype(auto) func2(int a, int b) { return a + b;}





