C++
没有金刚钻,也木有刷子
个人学习记录而已,主要供自己查看,如有不当请见谅。
展开
-
C++可变参数模板
C++可变参数模板原创 2023-01-04 09:21:18 · 279 阅读 · 0 评论 -
Qt多线程简单使用
qt多线程的简单实用原创 2022-12-29 10:32:38 · 329 阅读 · 0 评论 -
QThread的简单实用
QThread的简单使用原创 2022-12-29 10:15:25 · 147 阅读 · 0 评论 -
QPushbutton的hover悬空状态失效
QPushubutton的悬浮伪状态失效或者丢失原创 2022-10-13 14:10:56 · 3497 阅读 · 0 评论 -
typedef struct在C和C++中的区别
typedef struct在C和C++中的区别原创 2022-08-15 18:07:10 · 679 阅读 · 0 评论 -
计算迭代器之间的距离
1.函数:distance(begin,end); //计算迭代器begin和迭代器end之间的距离;原创 2022-06-07 17:06:18 · 775 阅读 · 0 评论 -
C++多线程
线程创建1.C++11的标准库中的多线程库 #include<thread>2.创建线程的格式 : 关键字thread 线程名(入口函数,入口函数的参数);若入口函数参数比较多,按照顺序往后写,用英文逗号隔开。3.子线程开始运行的两张方式:join() 子线程阻塞主线程,子线程运行完之后,主线程再次开始运行; detach() 主线程和子线程同时运行,如果主线程需要使用子线程的数据,在用到子线程数据的地方,子线程还没有运行结束,那么这个时候主线程使用的数据还是子线程最初的数原创 2022-05-31 12:56:18 · 1839 阅读 · 0 评论 -
Static总结
静态全局变量静态全局变量在声明它的整个文件都是可见的,而在文件之外是不可见的。而全局变量是不显式用 static 修饰的全局变量,全局变量默认是有外部链接性的,作用域是整个工程,在一个文件内定义的全局变量,在另一个文件中,通过 extern 全局变量名的声明,就可以使用全局变量。 未经初始化的静态全局变量会被程序自动初始化为0(在函数体内声明的自动变量的值是随机的,除非它被显式初始化,而在函数体外被声明的自动变量也会被初始化为 0);静态局部变量静态局部变量静态局部变量一般在声明处初始化,如果没原创 2022-03-29 10:50:12 · 3057 阅读 · 0 评论 -
设计模式--责任链模式(C++)
责任链模式就是对一批请求进行判断,是自己责任范围内的就处理,不是自己责任范围内的就传递给下一个负责人;比如有三个项目经理,顺序是A->B->C,把所有的项目都先传递给A,A拿到所有的项目后,把属于自己负责的项目留下来,把剩下的传递给B,然后B把属于自己的留下来,把不属于自己的再传递给C;1.请求者接口基类#pragma once#include <string>using namespace std;class Female{public: Female(voi原创 2022-02-15 11:15:11 · 778 阅读 · 0 评论 -
设计模式--观察者模式(C++)
观察者模式就是观察者根据被观察者的行为做出自己行为的模式,最多允许一个对象既是观察者也是被观察者;以小明为被观察者,班长和老师为观察者为例;原创 2022-02-14 17:10:44 · 969 阅读 · 0 评论 -
设计模式--命令模式(C++)
命令模式就是外界把命令告诉中间枢纽,然后由中间枢纽根据命令的不同,指派给相应的部门去完成;就像客户把要求告诉产品经理,然后产品经理根据客户不同的命令,把这些命令分给需求组、美工组、研发组去完成;客户直接与客户经理对接,而不与需求组、美工组、研发组直接对接;1.部门基类#pragma onceclass Group{public: Group(); virtual ~Group(); virtual void AddAction() = 0; virtual void ChangeAc原创 2022-02-14 14:14:50 · 511 阅读 · 0 评论 -
设计模式--抽象工厂模式(C++)
抽象工厂可以理解为简单工厂模式和工厂方法模式的结合,抽象工厂模式拥有多个工厂,每个工厂又可以生产多种产品;可大致理解为简单工厂模式是一个工厂,自己一对多;工厂方法模式是多个工厂,每个工厂一对一;抽象工厂模式是多个工厂,每个工厂一对多;1.产品接口Human#pragma onceclass Human{public: Human(); virtual ~Human(); virtual void character() = 0; virtual void Sex() = 0;pri原创 2022-02-13 13:03:28 · 1040 阅读 · 0 评论 -
设计模式--工厂方法模式(C++)
简单工厂模式只有一个工厂,这个工厂生产不同的产品;而工厂方法模式里可以拥有多个工厂,每个工厂负责一种产品的生产;1.产品基类#pragma onceclass Human{public: Human(); ~Human(); virtual void Skin() = 0;private:};Human::Human(){}Human::~Human(){}2.产品子类1#pragma once#include "Human.h"#include原创 2022-02-13 10:13:44 · 694 阅读 · 0 评论 -
设计模式--简单工厂模式(C++)
工厂模式中定义一个创建产品的接口(比如:creatHuman(std::string HumanType)这个函数),将实际创建工作推迟到子类中。这样可以使系统在不修改具体工厂角色的情况下创建不同新的产品。1.产品基类(Human)#pragma onceclass Human{public: Human(); ~Human(); virtual void Skin() = 0;private:};Human::Human(){}Human::~Human(){}原创 2022-02-13 09:31:16 · 510 阅读 · 0 评论 -
设计模式--单例模式(C++)
设计模式--单例模式原创 2022-02-12 17:10:37 · 523 阅读 · 0 评论 -
设计模式--代理模式(C++)
代理模式中的代理和执行者继承于同一个父类,先将执行者传递给代理人,然后代理人去调用实际执行者的行为;1.父类#pragma onceclass Women{public: Women(); virtual ~Women(); virtual void SeeMovieWithMan() = 0;private:};Women::Women(){}Women::~Women(){}2.代理人#pragma once#include "Women.h"原创 2022-02-12 14:33:49 · 479 阅读 · 0 评论 -
设计模式--策略模式(C++)
简介:一个策略对应一个锦囊;当用的时候,找到这个锦囊,从锦囊里拿出策略来使用。注意:锦囊只是简单的装载和调用策略,锦囊里没有逻辑。策略会有更大的自主权,运行更多的逻辑。实现:策略作为一个父类,具体的策略行为在子类中实现;锦囊作为具体策略的容器,在其构造函数中传入我们具体的策略;1.父类策略#pragma onceclass Strategy{public: Strategy(void); virtual ~Strategy(void); virtual void MyStrate原创 2022-02-12 14:16:20 · 615 阅读 · 0 评论 -
c++的bitset运用
1.功能:C++的 bitset 在 bitset 头文件中,它是一种类似数组的结构,它的每一个元素只能是0或1,每个元素仅用1bit空间。 //基本用法 bitset<4> bitset1; //无参构造,长度为4,默认每一位为0 bitset<8> bitset2(12); //长度为8,二进制保存,前面用0补充 string s = "100101"; bitset<10> bitset3(s); //长度原创 2021-07-18 14:56:17 · 225 阅读 · 0 评论 -
C++里int和string的转换
#include<string>#include<sstream>usingnamespacestd;int StringToInt(string &str){ return atoi(str.c_str());}string IntToString(int &a){ stringstream ss; ss<<a; return ss.str(); }voidmain(){//i...原创 2021-06-10 10:41:26 · 471 阅读 · 0 评论 -
求两个矩阵之和
#include<iostream>using namespace std;class Matrix{public: Matrix(); friend Matrix operator+(Matrix &a, Matrix &b); friend ostream& operator<<(ostream &, Matrix &); friend istream& operator>>(istream .原创 2021-04-21 10:52:22 · 1496 阅读 · 0 评论 -
模板类
1.template <class 虚拟类型参数名>2.用类模板定义对象形式:类模板名 <实际类型名> 对象名; 类模板名 <实际类型名> 对象名(实参表); #include<iostream>using namespace std;template <class numtype>class Compare{public: Compare(numtype a, numtype b) { x = a; y原创 2021-04-20 18:09:10 · 105 阅读 · 0 评论 -
友元成员函数
#include<iostream>using namespace std;class Date;class Time{public: Time(int, int, int); void display(Date &d);private: int hour,minute,second;};class Date{public: Date(int,int,int); friend void Time::display(Date &d);.原创 2021-04-20 17:55:16 · 94 阅读 · 0 评论 -
内置函数
1.作用:提高程序效率,缩短系统i响应时间2.函数原型:inline 函数类型 函数名(参数1,参数2...)3.内置函数不可以包含复杂的控制语句,比如switch和循环语句;4.缺点:会增加目标程序的长度5.只适用于规模较小且被频繁调用的简单函数#include<iostream>using namespace std;inline int max(int,int,int);int main(){ int i=10,j=20,k=30,m; m原创 2021-04-19 14:07:57 · 97 阅读 · 0 评论 -
链表中的节点每k个一组翻转
题目描述将给出的链表中的节点每k个一组翻转,返回翻转后的链表如果链表中的节点数不是k的倍数,将最后剩下的节点保持原样你不能更改节点中的值,只能更改节点本身。要求空间复杂度O(1)例如:给定的链表是1→2→3→4→5对于k=2, 你应该返回2→1→4→3→5对于k=3, 你应该返回3→2→1→4→5示例1输入复制{1,2,3,4,5},2返回值复制{2,1,4,3,5}/** * struct ListNode { * i...原创 2021-03-27 19:10:18 · 130 阅读 · 0 评论 -
C++基础知识
1.默认情况下vs下的小数是double类型,但是打印的时候最多显示小数点后5位。2.隐含转换:基本原则是将低类型数据转换为高类型数据,然后再计算。由低到高:char---short---int---unsigned---long---unsigned long---float---double3.水平制表符\t具有对\t后面的内容对齐的作用:\t前面有八个字符。aaa\t,在aaa后面五个空格;aaaaa\t后面三个空格; cout<<"aaa\thellowworld"<...原创 2021-03-07 18:47:50 · 107 阅读 · 0 评论 -
二进制文件--读文件
1.二进制读文件主要是利用流对象调用成员函数read2.函数原型:ifstream& read(char *buffer,int len);参数解释:字符指针buffer指向内存中一段存储空间,len是读写的字节数#include<iostream>#include<fstream>#include<string>using namespace std;//二进制读文件class Person{public: char m_name原创 2021-03-04 19:25:32 · 280 阅读 · 1 评论 -
二进制文件--写文件
1.以二进制的方式对文件进行读写操作,打开方式指定为 ios::binary2.写文件:二进制方式写文件主要利用流对象调用成员函数write函数原型:ostream &write(const char *buffer,int len);字符指针buffer指向内存中一段存储空间,len是读写的字节数#include<iostream>#include<fstream>#include<string>using namespace std;原创 2021-03-04 19:12:22 · 318 阅读 · 1 评论 -
文本文件--读文件
1.步骤包含头文件 #include<fstream> 创建流对象 ifstream ifs; 打开文件并判断文件是否打开成功 ifs.open("文件路径“,打开方式) 读数据 四种方式 关闭文件 ifs.close();#include<iostream>#include<fstream>#include<string>using namespace std;//文本文件 读文件 void test1(){ ifstrea.原创 2021-03-04 18:33:40 · 217 阅读 · 1 评论 -
文本文件--写文件
1.背景:程序运行时产生的数据据都属于临时数据,程序一旦运行结束都会被释放,通过文件可以将数据持久化2.c++中对文件操作需要包含头文件<fstream>3.文件类型分为两种:文本文件 文件以文本的ASCII码形式存储在计算机中 二进制文件 文件以文本的二进制形式存储在计算机中,用户一般不能直接读懂他们4.操作文件的三大类:ofstream:写操作 ifstream:读操作 fstream:读写操作5.文本文件--写文件写文件步骤如下:包含头文件 #inclu.原创 2021-03-04 18:08:45 · 774 阅读 · 1 评论 -
虚析构和纯虚析构
1.多态使用时,如果子类中有属性开辟到堆区,那么父类指针在释放时无法调用到子类的析构代码解决方式:将父类中的析构函数改为虚析构或者纯虚构虚析构和纯虚构共性:可以解决父类指针释放子类对象 都需要有具体的函数实现虚析构和纯虚构的区别:如果是纯虚析构,该类属于抽象类,无法实例化对象虚析构语法:virtual ~类名(){}纯虚构语法:virtual ~类名()=0;#include<iostream>using namespace std;#inclu.原创 2021-03-04 17:12:11 · 193 阅读 · 1 评论 -
多态案列--制作饮品
流程:煮水--冲泡--倒入杯中--加入辅料 利用多态技术实现本案列,提供抽象制作饮品类,提供子类制作咖啡和茶叶#include<iostream>using namespace std;#include<string>//多态案例--制作饮品class AbstractDrinking{public: //煮水 virtual void Boil() = 0; //冲泡 virtual void Brew() = 0; //倒入杯中 virtual v原创 2021-03-04 14:43:40 · 151 阅读 · 1 评论 -
纯虚函数和抽象类
在多态中,原创 2021-03-04 13:46:41 · 125 阅读 · 1 评论 -
多态的案例--计算器类
#include<iostream>using namespace std;#include<string>//分别利用普通写法和多态技术实现计算器//普通写法class Calculator{public: double getresult(string oper) { if (oper == "+") { return a + b; } else if (oper == "-") { return a - b; } el.原创 2021-03-03 19:10:02 · 222 阅读 · 1 评论 -
多态的基本概念
多态分为两类静态多态:函数重载和运算符重载属于静态多态,复用函数名 动态多态:派生类和虚函数实现运行时多态静态多态和动态多态区别:静态多态的函数地址早绑定--编译阶段确定函数地址 动态多态的函数地址晚绑定--运行阶段确定函数地址#include<iostream>using namespace std;#include<string>//动态//动物类class Animal{public: //虚函数 //函数前面加上virtual关键字,变成虚原创 2021-03-03 16:08:14 · 138 阅读 · 0 评论 -
菱形继承
1.菱形继承概念两个派生类继承同一个基类 又有某个类同时继承两个派生类 这种继承被称为菱形继承,或者钻石继承 菱形继承带来的主要问题是子类继承两份相同的数据,导致资源浪费以及毫无意义 利用虚继承可以解决菱形继承问题#include<iostream>using namespace std;#include<string>//动物类class Animal{public: int m_age;};//利用虚继承解决菱形继承的问题//加virtual原创 2021-03-03 13:14:59 · 456 阅读 · 0 评论 -
多继承用法
1.c++允许一个类继承多个类语法:class 子类:继承方式 父类1,继承方式 父类2...多继承可能会引发父类中有同名成员出现,需要加作用域区分c++实际开发中不建议用多继承#include<iostream>using namespace std;#include<string>//多继承class Base1{public: Base1() { m_a = 100; } int m_a; };class Base2{publ原创 2021-03-03 12:06:06 · 139 阅读 · 0 评论 -
继承同名静态成员处理方式
1.问题:继承中同名的静态成员在子类对象上如何进行访问?2.静态成员和非静态成员出现同名,处理方式一致访问子类同名成员 直接访问即可 访问父类同名成员 需要加作用域#include<iostream>using namespace std;#include<string>//继承中同名静态成员处理class Base{public: Base() { m_a = 100; } static void func() { cout <..原创 2021-03-03 11:48:43 · 112 阅读 · 0 评论 -
继承同名成员处理方式
问题:当子类和父类出现同名成员,如何通过子类对象访问到子类或者父类中同名的数据呢?访问子类同名成员 直接访问即可 访问父类同名成员 需要加作用域#include<iostream>using namespace std;#include<string>//继承中同名成员处理class Base{public: Base() { m_a = 100; } void func() { cout << "Base - func() 调.原创 2021-03-03 10:43:05 · 85 阅读 · 0 评论 -
继承中构造和析构顺序
1.子类继承父类后,当创建子类对象,也会调用父类的构造函数2.继承中先调用父类构造函数,再调用子类构造函数,析构顺序与构造相反#include<iostream>using namespace std;#include<string>//继承中的构造和析构顺序class Base{public: Base() { cout << "Base构造函数" << endl; } ~Base() { cout <<原创 2021-02-27 17:40:10 · 730 阅读 · 0 评论 -
继承中的对象模型
1.父类中私有成员也是被子类继承下去了,只是由编译器给隐藏后访问不到#include<iostream>using namespace std;#include<string>//继承方式//父类中私有成员也是被子类继承下去了,只是由编译器给隐藏后访问不到class Base{public: int m_a;protected: int m_b;private: int m_c;};class Son :public Base{public:原创 2021-02-27 17:14:23 · 95 阅读 · 0 评论