学习之路
深空漫步
这个作者很懒,什么都没留下…
展开
-
实现一个简单的vector容器
当然还有好多没实现,列如二维的数组,里面会用到可变模板参数当然有空就改进下,自己实现的迭代器还有容器MyVector.h#pragma once#ifndef MYVECTOR#define MYVECTOR#include <algorithm>template<class T>class MyVector;template<class T>class MyIterator;template <class T>class MyVe原创 2020-08-03 18:51:57 · 416 阅读 · 0 评论 -
实现一个简单stack 栈
有段时间没更新了 最近想把STL的容器都实现一遍来提升自己写轮子的能力MyStack.h#pragma once#ifndef MYSTACK#define MYSTACK#include <iostream>#include <string>typedef unsigned int uint;template<class T>class MyStack { T* ptr; uint capacity; uint len;public:原创 2020-07-30 12:16:40 · 293 阅读 · 0 评论 -
c++智能指针详解
指针一直都是c\c++头疼的东西,虽然方便,但是能不用动态内存分配就不用,因为你new 多了后在释放后程序中就会有很多碎片,而且释放已经引用会使用不规范会导致程序崩溃C++后面其实有很多东西都是从很老版本的boost库引入进来了,比如functional智能指针等等 智能指针就是采用了RAII思想下期再讲因为raw指针经常会导致内存泄漏,非法内存访问,多次释放同一块内存,释放非法动态内存等问题C++通过模板提供了更加方便的对raw指针包装的智能指针,作为对象 他使用上类似raw指针可以避免raw指原创 2020-07-21 17:47:50 · 565 阅读 · 0 评论 -
c++ 网络通讯之Socket TCP以及vs不能用老函数的问题
网络编程 是什么呢 其实我们是按照固定逻辑去写代码的网络编程他已经存在了一段时间了 我们都是按照别人规定的协议去写代码的这些都是大佬规定好了的 我们都是用同一种方式去沟通,可以把语言看成协议互联网又是啥互联网就是不同地方的电脑通过协议连接在一起 互相发送数据也可以理解端到端的通讯这里分两个架构CS 架构 BS架构C Client 指的是客户端S Server 指的是服务器B 指的浏览器比如多个手机首先手机发给基站(通讯塔,服务器)然后服务器然后再发给另外一部手机每一个手机都原创 2020-07-21 16:44:57 · 429 阅读 · 0 评论 -
c++ function和bind
为什么要用std::function 因为 函数指针,函数对象,匿名函数都可以作为调用对象 即高阶函数调用对象然而并不是所有函数都可以被高阶函数调用因此要用function 列如类function 可以创建对象 他可以接受任意类型可以调用对象 而且还可以用数组存储一个函数容器 但是函数参数格式必须一样std::bind 是一个函数适配器 他接收一个函数和一组实参 返回一个function函数对象using namespace std::placeholders; // bind如果不想过早传递参数可原创 2020-07-19 12:06:10 · 741 阅读 · 0 评论 -
c++ functional之回调函数
**什么是回调函数函数指针主要作用其他函数的参数 这个其他函数就是<高阶函数>作为参数的函数指针指向的函数就是所谓的回调函数 向高阶函数传递不同的函数指针高阶函数中就调用不同的 回调函数 从而执行不同的处理功能**#include <iostream>#include <vector>using namespace std;template<typename T>T find_optimal(const vector<T>arr,原创 2020-07-19 11:54:54 · 765 阅读 · 0 评论 -
c++ functional之匿名函数捕获子句
匿名函数是一个非常方便的函数,他可以不需要函数的名字自己被函数指针,或被当成参数传递给高阶函数调用,或者直接输出#include <iostream>#include <vector>using namespace std;// Lambda 表达式 类似于函数 但不需要函数名 因此成为匿名函数int accumulate(vector<int>arr, int n, int(*fun)(int)) { int sum{ 0 }; for (int i原创 2020-07-19 11:45:53 · 1034 阅读 · 1 评论 -
c++ functional之函数对象
上期讲了函数指针这一期讲函数对象,就是通过对象去重载()运算符去调用让高级函数去调用不同的函数#include <iostream>#include <vector>using namespace std;// 因为le(x,y)形式 类似于函数调用 以此le成为函数对象 其实就是一个类的普通对象而已template<typename T>class LessThan {public: bool operator()(T a, T b)const { r原创 2020-07-19 11:31:49 · 521 阅读 · 0 评论 -
c++ functional之函数指针
#include <iostream>using namespace std;using AVE_PTR = double(*)(const double*, const int); // 给函数指针取别名typedef double(*AGE)(const double*, const int);// using 和typedef 都给了double(*)(const double*, const int); 都是一样的但是typedef不能用于函数模板的指针类型double ave原创 2020-07-19 11:18:12 · 619 阅读 · 0 评论 -
Qt 小画板
菜单栏的功能都实现了,如果想添加工具栏可以用函数封装代码放行使用mainWindow.h#ifndef MAINWINDOW_H#define MAINWINDOW_H#include <QMainWindow>#include <QApplication>#include <QMenu>#include <QAction>#include <QMenuBar>#include <QDebug>#include原创 2020-07-14 20:53:54 · 666 阅读 · 0 评论 -
Qt 小时钟
widget.h#ifndef WIDGET_H#define WIDGET_H#include <QWidget>class Widget : public QWidget{ Q_OBJECTpublic: Widget(QWidget *parent = nullptr); ~Widget(); void CalcPosition();protected: void timerEvent(QTimerEvent *event) o.原创 2020-07-14 20:46:54 · 919 阅读 · 0 评论 -
用c++ 的可变模板参数递归来表达 著名的斐波那契数列
#include <iostream>//constexpr int fibonacci() { //constexpr 是使得表达式在编译期间就进行计算,从而避免了运行期间的计算开销 通常用于常量表达式// return fibonacci<n - 1>() + fibonacci < n - 2>(); 这个也是著名的斐波那契数列//} 没用constexpr if ////template<> // 模板专门化//constexpr in原创 2020-07-11 23:28:29 · 693 阅读 · 0 评论 -
c++ 模板函数调用优先级问题
#include <iostream>using namespace std;template<typename W> // template 是定义模板 <typename T> 模板类型可以自定义 T就是别名W Max(W a, W b){ //和普通函数一样可以重载 T 是返回类型 (T a,T b)函数参数 下面的参数类型都可以自定义 return a > b ? a : b;}template<> // <>没原创 2020-07-11 23:19:38 · 985 阅读 · 0 评论 -
c++ 的模板类声明基本用法
#include <iostream>using namespace std;template<typename T> // template 是声明模板 <typename T> 是类型 也可以写成<class T> 都是一样的class Vector {public: // 普通类的构造函数都是 类名() 但是模板类就必须Vector<type>()了 explicit Vector<T>(int cap = 5); //原创 2020-07-11 23:15:05 · 2024 阅读 · 0 评论 -
Qt QTreeWidget树桩控件路径文件流小实例
直接上代码了 资源文件的图片都是我截的、widget.h#ifndef WIDGET_H#define WIDGET_H#include <QWidget>#include <QTreeWidget> // 树控件#include <QTreeWidgetItem> // 树的子节点#include <QSplitter> // 分割器#include <QTextEdit>#include <QHBoxLayout&g.原创 2020-07-11 22:56:50 · 468 阅读 · 2 评论 -
c++类的+-都是用运算符重载完成的
关于重载运算符很多模板类都会用到可以重载很多运算符如-,+,*,/,[],(),new,<<,>> ,!,==,<=,>=,!=,++,–等等好多还有转换运算符大部分内容都有注释下列是重载比较运算符#include <iostream>#include <utility> //模板using namespace std::rel_ops; //如果已经定义了重载< 和 == 模板类会自动生成针对类型的重载运算符如果>=c原创 2020-06-06 21:09:34 · 235 阅读 · 0 评论 -
c++的类 基类指针数组与虚析构函数(九)
虚析构函数 就是 向派生类传递的析构结构虚函数 是从顶部向下传递虚析构函数是从底部向上传递的基类是顶层#include <iostream>#include <string>using namespace std;class A{public: A() = default; A(string s) :s{ s }{} virtual ~A(){ cout << "析构函数A\n"; } // 虚析构函数向下传递 virtual void pri原创 2020-06-06 20:51:45 · 453 阅读 · 0 评论 -
c++ 的类 纯虚函数和抽象类(八)
函数体 = 0 的虚函数成为纯虚函数,如果一个类里面有纯虚函数就是抽象类必须要在派生类实现纯虚函数才能有派生类的体,也就是对象引用#include <iostream>using namespace std;struct Vector2{ double x, y;};class Shape{public: //Vector2 Position(){ return x; } virtual void draw() = 0; // 纯虚函数 不知道怎么实现的需要在派生类实现的函数原创 2020-06-02 23:50:14 · 186 阅读 · 0 评论 -
c++的类 虚函数和多态和dynamic_cast 转换(七)
只要在基类中用关键是virtual 声明了虚函数,派生类中这个同名虚函数加不加virtaul 关键字 这个函数都是虚函数派生类跟基类重名的函数或成员只需要在基类 成员函数前面加上virtual 虚函数关键字*那么 用基类指针去引用或指向,派生类对象都可以调用派生类同 名成员函数 如果派生类想转基类就必须强制转换 T &s = a p = &a**dynamic_cast<type *>§;或<type&> "这里的type是类型"引用它的主要作用是原创 2020-05-31 23:00:39 · 313 阅读 · 0 评论 -
c++的类 虚基类(六)
什么是虚基类就是他的派生类有两个或者以上的派生类通过虚继承,这样就可以避免派生类有多个基类的副本从而减少内存消耗关于继承可以看我的这一篇添加链接描述#include <iostream>#include <string>using namespace std;class Person{ string name{ "noname" };};class PartyMember :virtual Person{ //虚继承 普通是继承public Person p原创 2020-05-28 21:33:38 · 152 阅读 · 0 评论 -
C++的类 派生类与基类指针(五)
#include <iostream>class B{ int b{ 0 };public: B(int b = 0) :b(b){} void print(){ std::cout << "B:" << b<<std::endl; }};class D :public B{ double d{ 2.5 };public: D(double d = 0) :d(d){} //调用派生类构造函数时先会调用基类默认构造函数 b是0 voi原创 2020-05-27 20:27:41 · 294 阅读 · 0 评论 -
c++的类派生类的构造函数(四)
派生类的构造函数构造会先调用基类的默认构造函数,然后在调用派生类的构造函数派生类的析构函数则相反 先调用派生类的析构函数在调用基类的构造函数派生类构造函数 自底向上,析构函数 自上向底如果要派生类构造函数想调用重载的基类构造函数那么就必须 D(): B(参数){} 拷贝构造函数关于继承可以看我的这一篇添加链接描述#include <iostream>#include <string>using namespace std;class B{ int b{ 0 };原创 2020-05-27 20:25:33 · 225 阅读 · 0 评论 -
c++的类派生继承(三)
下列是继承方法详解class A{}class B:A{ //此方法是默认的继承方法 私有继承 class B:private A}struct C:A{ // 用struct 定义一个派生类 如果没指名方法 默认的是 struct C:public A}private // 私有继承 不管采用哪种继承方式,基类私有成员 在派生类中都是不可访问的protected:成员// 如果是 private 继承的方式,则在派生类中是private 成员// 如果是protected继承方式,原创 2020-05-24 20:48:16 · 207 阅读 · 0 评论 -
c++的类(二)构造函数
小编学完c++给你们分享下笔记Date() = default; //default 默认构造函数Date() = delete; //delete 禁用构造函数 禁止拷贝 赋值运算符 delete[] a动态分配删除explicit Date(); // 就是禁止含隐调用隐式转换friend void print();// friend是友元 在类中声明 函数或外部类的友元 可以在外部直接访问这个类的 私有或保护成员函数mutable int a //a是mutable 成员变量 是可以被修改的原创 2020-05-23 22:37:33 · 161 阅读 · 0 评论 -
c++ 的类 (一)
小编学完c++给你们分享下笔记什么是类就是一个封装了多个函数,功能,以及那些成员在C语言中都是直接在main或者其他函数中定义变量或者在外部定义全局变量类里面又分public 公共的所以都可以调用private 私有的只有本类可以调用,还有友元函数或者类friendprotected 受保护的成员或函数,都是通过派生给子类用的后面我将会讲到this 就是本类的成员可以通过this->去访问本类的成员函数&this 就是取调用的地址成员Date() = default; //de原创 2020-05-23 22:32:45 · 141 阅读 · 0 评论 -
c++ 函数以及入栈出栈和const以及引用&取地址
**const int a = 0; //定义时必须赋初值 也不能用其他变量修改 还有普通变量不能引用 const对象const int * c = &a; //指针可以修改 等价int * const cconst int const b = &a;//const int const 不能被修改而且只能取a小编还有其他知识列如类void f(int x, int &y){ // x只能拷贝了p y是引用了pl 所以x 会被销毁 y是引用不会被销毁 x++; y++原创 2020-05-23 22:30:04 · 410 阅读 · 0 评论 -
Qt c++的核心机制信号与槽
学完Qt的核心机制 信号与槽的总结如下:你要使用signal(信号)和slot(槽) 必须是QObject的派生类,或者继承QObject这个类而且在派生类中必须声明Q_OBJECT不然用connect会说对接错误 它必须放在公共或私有成员当中保护就不清楚了QObject::connect(&a,SIGNAL(stateChanged(int)),&b,SLOT(Function(int)));// &a信号对象,SIGNAL(信号函数),&b槽函数对象,SLOT(槽原创 2020-05-13 21:40:59 · 235 阅读 · 0 评论