- 博客(83)
- 资源 (5)
- 收藏
- 关注
原创 Centos7.9 部署分子动力学相关软件
在CentOS7.9环境下,安装gromacs2018.1、MiniConda、AmberTools23、VMD、MDAnalysis、MDTraj、PyMol等工具
2024-10-22 10:14:21 825
原创 【无标题】
I2C在硬件上的接法如下所示,主控芯片引出两条线SCL,SDA线,在一条I2C总线上可以接很多I2C设备,会加一个上拉电阻。上拉电阻主要用于为信号线或GPIO引脚提供默认状态(根据I2C总线规范,总线空闲时两根线都必须为高)。在I2C 的电路中,I2C设备(芯片)的 SCL 和 SDA 的内部电路是“开漏”的,这意味着它们可以吸收电流,但无法提供电流。通俗点讲就是:这种信号可以被设置为低电平,但不能被设置为高电平。I2C协议中数据传输的单位是字节,也就是8位。
2024-01-30 00:07:40 375
原创 IIC 总线协议
支持任何IC 生产过程(NMOS、CMOS、双极性)。两线——串行数据(SDA) 和串行时钟(SCL) 线在连接到总线的器件间传递信息。每个器件都有一个唯一的地址识别(无论是微控制器、LCD驱动器、存储器或键盘接口),而且都可以作为一个发送器或接收器(由器件的功能决定)。很明显,LCD驱动器只是一个接收器,而存储器则既可以接收又可以发送数据。除了发送器和接收器外,器件在执行数据传输时也可以被看作是主机或从机(见图1)。主机是初始化总线的数据传输并产生允许传输的时钟信号的器件。
2024-01-29 23:49:26 612
原创 curl库移植到Qt工程
首先下载curl的工程源码,笔者使用的是curl-7.68.0.zip进入到下载的源码文件夹中,双击buildconf.bat文件3. 进入winbuild目录下可以看到有一个缴 BUILD.WINDOWS.txt ,我们可以打开看一下,我们挑有用的看大致意思是,打开Visual Studio命令行的工具去编译,详情见提供的那两个链接,第二个链接中给了我们很大启发,告诉我们要用这个命令行编译工具,
2023-04-24 16:11:32 376 1
原创 ubuntu下的LDAP搭建配置和测试
Ubuntu下安装和配置LDAP服务此部分也可以参考 LDAP环境搭建运行如下命令sudo apt-get install slapd ldap-utils安装过程会要求输入密码默认的配置相关的目录在/etc/ldap目录结构如下对配置文件进行简单修改,内容如下## LDAP Defaults## See ldap.conf(5) for details# This file should be world readable but not wor
2022-03-14 09:43:25 3607 1
原创 wireshark协议识别的基本原理
wireshark协议识别的基本原理IP头部 协议字段 表基于IP协议的一些服务是通过IP协议报文头部信息的协议字段的值去判断的IP头格式IP头部协议字段表Decimal Keyword Protocol References十进制 关键字 协议全称 参考文献------- --------------- -----------------------
2022-03-10 16:52:58 1744
原创 Ubuntu18.04下的LDAP搭建
Ubuntu18.04下的LDAP搭建安装及配置LDAP安装LDAP执行以下的安装命令sudo apt-get install slapd ldap-utils如果安装特别慢或者无法下载,更新源和依赖,推荐阿里源安装过程中会提示输入设置LDAP管理源账号密码密码确认配置LDAP打开 /etc/ldap/ldap.conf 配置文件,按照如下内容进行配置sudo vi /etc/ldap/ldap.conf ## LDAP Defaults## See
2022-03-10 14:29:09 2174
原创 Ubuntu apt-get安装工具时报错,无法获得dpkg前端锁问题解决
问题描述如下解决方法:把报错提示信息中的lock文件删除重新运行即可sudo rm /xxx/xxx/lock-xxx 重新运行apt-get,可以正常使用
2022-03-10 13:47:51 2181 1
原创 Ubuntu 更新源更新依赖
备份配置文件sudo cp /etc/apt/sources.list /etc/apt/sources.list.save修改配置文件sudo vi /etc/apt/sources.list 将下面的内容拷贝到sources.list 文件中,注意根据自己的ubuntu版本选择拷贝#(ubuntu18)deb http://mirrors.aliyun.com/ubuntu/ bionic main restricted universe multiversedeb htt..
2022-03-10 13:46:31 1226
原创 打开wireshark后没有接口解决办法
打开wireshark后没有接口解决办法现象如下管理员身份运行cmd,重启NPF(Netgroup Packet Filter 网络数据包过滤器)服务然后再用管理员身份运行wireshark,可以看到出现了所有网卡设备
2021-11-04 09:36:16 8381 5
原创 ubuntu18上Qt5移植Opencv3.2.0 遇到的坑
ubuntu18上Qt5移植Opencv3.2.0 遇到的坑编译报错1报错信息找不到Mat类的定义检查以下几个地方//包含头文件和命名空间#include <opencv2/opencv.hpp>using namespace cv;工程文件中添加要链接的库,在原有的内容上添加如下的内容 INCLUDEPATH += /usr/local/opencvINCLUDEPATH += /usr/local/opencv2CONFIG(debug, debug|re
2021-09-05 09:17:09 212
原创 C++中的类模板
类模板思考:C++中是否能够将泛型的思想应用于类?一. 类模板一些类主要用于存储和组织数据元素类中数据组织的方式和数据元素的具体类型无关如:数组类、链表类、Stack类、Queue类,等C++中将模板的思想应用于类,使得类的实现不关注数据元素的具体类型,而只关注类所需要实现的功能。二. C++中的类模板以相同的方式处理不同的类型在类声明前使用template进行标识< typename T >用于说明类中使用的泛指类型Ttemplate <typename T
2021-09-03 19:40:09 101
原创 C++的函数模板
函数模板一. C++中有几种交换变量的方法?定义宏代码块 VS 定义函数定义宏代码块优点:代码复用,适合所有的类型缺点:编译器不知道宏的存在,缺少类型检查定义函数优点:真正的函数调用,编译器对类型进行检查缺点:根据类型重复定义函数,无法代码复用二. 泛型编程泛型编程概念不考虑具体数据类型的编程方式对于Swap函数可以考虑下面的泛型写法//Swap泛型写法中的T不是一个具体的数据类型,而是泛指任意的数据类型void Swap(T& a, T& b){
2021-09-03 19:39:35 85
原创 抽象类和多重继承
抽象类和多重继承一. 引言图形的面积如何计算?在现实生活中需要知道具体的图形才能求面积问题:shape类有必要存在么?二. 抽象类面向对象中的抽象类可用于表示现实世界中的抽象概念是一种只能定义类型,而不能产生对象的类只能被继承并且重写相关函数直接特征是相关函数没有完整的实现Shape是现实世界中各个图形的抽象概念程序中必须能够反映抽象的图形程序中通过抽象类表示图形的概念抽象类不能创建对象,只能用于继承三. 抽象类与纯虚函数C++中没有抽象类的概念C++中通过纯虚函
2021-09-03 19:37:39 917
原创 虚函数和虚函数表 - 多态的实现原理
虚函数和虚函数表 - 多态的实现原理虚函数表C++中虚函数是通过一张虚函数表(virtual table)来实现的,在这个表中,主要是一个类的虚函数的地址表,这张表解决了继承、覆盖的问题在有虚函数的类的实例中这个表被分配在了这个对象的内存中,所以当我们用父类的指针来操作一个子类的时候,这张虚函数表就像一张地图一样指明了实际所应该调用的函数#include<iostream>using namespace std;class Base{public: virtual
2021-09-03 19:36:53 148
原创 C++中的多态
多态一.面向对象中期望的行为根据实际情况的对象类型判断如何调用重写函数父类指针(引用)指向父类对象则调用父类中定义的函数子类对象则调用子类中定义的重写函数二. 面向对象的多态概念根据实际的对象类型决定函数调用的具体目标同样的调用语句在实际运行时有多种不同的表现形式三. C++直接支持多态的概念通过使用virtual关键字对多态进行支持被virtual声明的函数被重写后具备多态特性被virtual声明的函数叫做虚函数#include <iostream&g
2021-09-03 19:36:02 110
原创 运算符重载
运算符重载思考一个问题,C++中从输出到终端数据使用的 cout << “hello” << endl; <<的含义产生了变化,已经不是以前的左移运算符的含义,这是C++中对左移运算符<<做了重载,一. 运算符重载C++中的重载能够扩展操作符的功能操作符的重载以函数的方式进行本质:用特殊形式的函数扩展操作符的功能通过operator关键字可以定义特殊的函数operator的本质是通过函数重载操作符语法:Type opera
2021-09-03 19:35:23 67
原创 C++中的友元
友元一. 友元概念友元是C++中的一种关系友元关系发生在函数与类之间或者类与类之间友元关系是单向的,不能传递二. 友元的用法#include<string>#include<iostream>using namespace std;class Student{ string name; string hometown; int age;public: static int stuCount; Student(s
2021-09-03 19:34:51 326
原创 const关键字在C++类中的使用
C++中const关键字在类内的使用在C++中const除了可以修饰变量还可以修饰函数一. 常数据成员 const修饰类的成员变量,表示成员常量,不能被修改,同时它只能在初始化列表中赋值。可被const和非const成员函数调用,而不可以修改。比如,我要定义一个描述缓冲区的类,Buff,缓冲区大小和缓冲区的首地址是不能修改的,否则容易丢失数据,我们使用const修饰class Buff{ const int size; char * const buff; char *
2021-09-03 19:33:38 146
原创 static关键字在C++类中的使用
static关键字在C++类中的使用一. 静态成员变量我们现象一个现实生活中的场景,班里一共有20个同学,假如今天班里来了个新同学,班里的每个同学其实都是知道当前学生一共21人,问班长,班长知道,问副班长,副班长知道抽象成代码,怎么在类内定义一个成员变量,来记录当前这个类对象的个数?即每个对象可见的一个成员变量回顾C语言中,哪个关键字可以延长变量的生命周期,将变量从栈区移到静态存储区static1.1 静态成员变量静态成员变量属于整个类所有静态成员变量的生命期不依赖于任何对象可以通过类名
2021-09-03 19:32:52 453
原创 父子间的冲突
父子间的冲突思考:子类中是否可以定义父类中的同名成员?如果可以,如何分区?如果不可以,为什么?一. 父子间的冲突子类可以定义父类中的同名成员子类中的成员将隐藏父类中的同名成员父类中的同名成员依然存在于子类中通过作用域分辨符(::)访问父类中的同名成员二. 再论重载重载函数的本质为多个不同的函数函数名和参数列表是唯一标识函数重载必须发生在同一个作用域中#include <iostream>#include <string>using name
2021-09-02 09:08:05 68
原创 继承的构造与析构
继承的构造与析构一. 思考如何初始化父类成员?父类构造函数和子类构造函数有什么关系?二. 子类对象的构造子类可以定义构造函数子类构造函数a. 必须对继承而来的成员进行初始化i. 直接通过初始化列表或者赋值的方式进行初始化ii. 调用父类构造函数进行初始化父类构造函数在子类中的调用方式a. 默认调用i. 适用于无参构造函数和使用默认参数的构造函数b. 显式调用i. 通过初始化列表进行调用ii. 适用于所有父类构造函数class Child:public Par
2021-09-02 09:07:42 58
原创 继承的访问级别
继承的访问级别一. 思考:子类是否可以直接访问父类的私有成员?根据面向对象理论:子类拥有父类的一切属性和行为子类能够直接访问父类的私有成员根据C++语法外界不能直接访问类的private成员子类不能直接访问父类的私有成员举例:有没有方法实现,父子间可以直接访问,外界无法访问的访问级别引出前面的protected二. 继承中的访问级别面向对象中的访问级别不只是public和private可以定义protected访问级别关键字protected的意义修饰的成员不能被外界
2021-09-02 09:07:03 79
原创 C++中的继承
C++中的继承龙生龙,凤生凤,老鼠的孩子会打洞。在C++中,或者面向对象编程中的体现就是,子类拥有父类的属性和方法。属性即类内的成员变量,方法即类内的成员函数一. 类与类之间的关系组合#include<iostream>using namespace std;class Memory{public; Memory() { cout << "Memory()" << endl; } ~Memory()
2021-09-02 09:06:21 63
原创 C++实现一个string类
实现一个string类类的封装class String{public: String(const char *str = NULL); //通用构造函数 String(const String &anather); //拷贝构造函数 ~String(); //析构函数 String & oprater = (const String &rhs); //赋值函数,通过赋值运算符重载实现private: char *m_
2021-09-02 09:01:00 111
原创 this指针
this指针一. 疑问:成员函数和成员变量都是隶属于具体的对象吗?从面向对象的角度对象由属性(成员变量)和方法(成员函数)构成对象由数据和函数构成数据位于栈,堆和全局数据区函数只能位于代码段 #include<iostream>using namespace std;class Test{public: void hello() { cout << "hello" << endl; }
2021-09-02 07:16:21 94
原创 深拷贝和浅拷贝
深拷贝和浅拷贝一 深拷贝和浅拷贝浅拷贝拷贝后对象的物理状态相同深拷贝拷贝后对象的逻辑状态相同二. 默认拷贝构造函数的缺陷默认拷贝构造函数的缺陷(浅拷贝)实现深拷贝#include<iostream>using namespace std;class Test{public: int i; int j; int* p;public: int getI() { return i; }
2021-09-02 07:16:00 90
原创 拷贝构造函数
拷贝构造函数普通数据类型初始化的方式,可以将一个变量的值复制给另一个变量int a = 10;int b = a;怎样实现对象之间成员变量的值复制class Test{ ......}Test a(100);Test b = a;一. 拷贝构造函数参数为const class_name&的构造函数当类中没有定义拷贝构造函数式,编译器默认提供一个拷贝构造函数,简单的进行成员变量的值复制class 类名{ 类名(const 类名& th
2021-09-02 07:14:31 135
原创 C++中四种强制类型转换
#include <stdio.h>//用于基本类型间的转换//不能用于基本类型指针间的转换//用于有继承关系类对象之间的转换和类指针间的转换void static_cast_demo(){ int i = 0x12345; char c = 'c'; int* pi = &i; char* pc = &c; c = static_cast<char>(i); pc = static_cast<
2021-09-02 07:13:30 227
原创 C++中的类支持声明和实现的分离 - C++中的模块化编程
C++中的类支持声明和实现的分离.h头文中只有类的声明成员变量和成员函数的声明.cpp源文件中完成类的其它实现成员函数的具体实现#ifndef _OPERATOR_H_#define _OPERATOR_H_class Operator{private: char mOp; double mP1; double mP2; public: bool setOperator(char op); void setParameter(do
2021-09-02 07:12:55 125
原创 初始化列表
初始化列表现在我们知道一个对象在被创建的时候需要被初始化,保证不论在哪里创建新的对象都有统一确定的初始值。在类中我们可以定义const变量么,const关键字的作用是定义一个只读变量,定义的同时必须为其初始化,后面不能修改其值。成员变量的初始化是在构造函数中进行的,一. 思考下面的类定义是否合法?如果合法,ci的值是什么?存储在哪里?class Test{private: const int ci;public: int getCI(){return ci;}}C+
2021-09-01 15:08:40 78
原创 类的构造和析构
类的构造和析构一. 构造函数成员变量的初始值在栈上创建对象,成员变量初始为随机值在堆和静态存储区上创建对象,成员变量初始值为0一般而言,对象都需要一个确定的初始值解决方案,定义初始化函数存在的问题 initialize只是一个普通函数,必须显式调用 如果未调用initialize函数,运行结果是不确定的#include<iostream>using namespace std;class Test{ int i;public: voi
2021-09-01 14:53:38 379
原创 C++类的封装
类的封装一盘鱼香肉丝的组成,油盐酱醋、肉丝、胡萝卜丝、木耳丝…这些我们可以直接看到原料或者直接品尝到基本的味道。思考一个问题,我们可以花半天的时间尝试制作一盘鱼香肉丝,学习制作一盘鱼香肉丝是不需要学习种植蔬菜、养猪、酿造酱油和醋这些工艺的。一. 类的封装类的组成类的实现细节:一盘鱼香肉丝的制作方法类的使用方法:吃封装类根据经验:并不是类的每个属性都是对外公开的而一些类的属性是对外公开的必须在类的表示法中定义属性和行为的公开级别鱼香肉丝的原料肉眼可见,对外公开,但是制作的工艺,厨师
2021-09-01 14:43:47 68
原创 面向对象(OOP)
一. 面向对象(OOP)面向对象是将现实事物抽象出来用程序描述,举个例子,有一天我想吃鱼香肉丝,两个方案:一是自己去菜市场买食材,回来处理食材,炒一盘鱼香肉丝。二是,下馆子,直接对老板说:老板,来一份鱼香肉丝。方案一,就是面向过程,方案二,就是面向对象面向对象有什么优势呢?首先你不需要知道鱼香肉丝是怎么做的,降低了耦合性,如果突然间不想吃鱼香肉丝了,想吃地三鲜,对于方案一,可能不太容易了,还需要重新买食材,处理食材然后炒菜。对于方案二,就容易多了,直接大喊,老板,那个鱼香肉丝换成地三鲜吧,提高了可维护
2021-09-01 14:28:50 106
原创 C++的动态内存分配
C++的动态内存分配一 关键字new和deleteC++中通过new关键字进行动态内存分配C++中的动态内存申请是基于类型进行的delete关键字用于内存释放//变量申请Type* pointer = new Type;//....delete pointer;//数组申请Type * pointer = new Type[N];delete[] pointer;二. new关键字的初始化new关键字可以开辟内存空间的同时对内存空间初始化int * pi
2021-09-01 14:20:04 166
原创 函数的重载
函数的重载一. 重载的概念同一个标识符在不同的上下文有不同的意义如:play chess、play the piano、 play bascketball 、play the guitar 、play the ukulele二. swap函数的局限 上面我们用引用定义行参,也可以实现swap函数,但是还是有可以改进的地方,上述的swap()只能交换两个整数类型的变量,如何实现使用同一个函数名,但是可以实现不同数据类型两个变量的交换三. 函数重载(function overload)
2021-09-01 14:11:00 103
原创 C++中的引用
C++中的引用参数的传递本质上是一次赋值的过程,赋值就是对内存进行拷贝。所谓内存拷贝,是指将一块内存上的数据复制到另一块内存上。对于像 char、bool、int、float 等基本类型的数据,它们占用的内存往往只有几个字节,对它们进行内存拷贝非常快速。而数组、结构体、对象是一系列数据的集合,数据的数量没有限制,可能很少,也可能成千上万,对它们进行频繁的内存拷贝可能会消耗很多时间,拖慢程序的执行效率。C/C++禁止在函数调用时直接传递数组的内容,而是强制传递数组指针,而对于结构体和对象没有这种限制,调
2021-09-01 13:51:55 71
原创 C++的字符串类
C++的字符串类C语言中的字符串表示方式字符串常量字符指针字符数组字符串函数C++的string类定义方法使用string类需要包含头文件#include<iostream>#include<string>using namedpace std;int main(int argc, const char* argv[]){ //变量 s1 只是定义但没有初始化,编译器会将默认值赋给 s1,默认值是"",也即空字符串。 s
2021-09-01 13:44:29 165
原创 命名空间(名字空间)
命名空间(名字空间)一个中大型软件往往由多名程序员共同开发,会使用大量的变量和函数,不可避免地会出现变量或函数的命名冲突。当所有人的代码都测试通过,没有问题时,将它们结合到一起就有可能会出现命名冲突。为了解决合作开发时的命名冲突问题,C++引入了命名空间(Namespace)的概念。4.1 命名空间C语言中C语言中所有的全局标识符共享同一个作用域标志符之间可能发生冲突C++中提出了命名空间的概念命名空间将全局作用域分成不同的部分不同命名空间中的标识符可以同
2021-09-01 13:41:30 223
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人