自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(53)
  • 资源 (1)
  • 收藏
  • 关注

转载 QT文件读写操作

1.read读文件加载文件对象: QFile file(“文件地址”);打开加载的文件: file.open(打开方式);操作文件关闭打开的文件: file.colse();void Widget::on_pushButton_clicked(){ QFile file("L:/qtpro/_qtApp/text/t.txt"); file.open(QIODevice::ReadOnly | QIODevice::Text); QByteArray t

2020-08-21 14:47:12 1235

原创 QObject和QTimer定时器(定时切换图片)

显示图片 QPixmap函数使用:开启定时器返回值myTimer:该定时器的ID;参数TIMEOUT: 定时的时间,单位为毫秒;关闭定时器参数:定时器ID代码:witget.cpp:#include "widget.h"#include "ui_widget.h"Widget::Widget(QWidget *parent) : QWidget(parent) , ui(new Ui::Widget){ ui->setupUi(this);

2020-08-20 18:01:18 803

原创 QT信号与槽

概述 :所谓信号槽,实际就是观察者模式。当某个事件发生之后,比如,按钮检测到自己被点击了一下,它就会发出一个信号(signal)。这种发出是没有目的的,类似广播。如果有对象对这个信号感兴趣,它就会使用连接(connect)函数,意思是,将想要处理的信号和自己的一个函数(称为槽(slot))绑定来处理这个信号。也就是说,当信号发出时,被连接的槽函数会自动被回调。信号和槽是Qt特有的信息传输机制,是Qt设计程序的重要基础,它可以让互不干扰的对象建立一种联系。槽可以与信号连接在一起,每当和槽连接的信号被发射

2020-08-18 16:36:28 450

原创 C++函数对象

函数对象函数对象也叫函数符,函数符是可以以函数方式与()结合使用的任意对象。这包括函数名,指向函数的指针和重载了()运算符的类对象(即定义了函数opertor()()的类)。例如,可以这样定义一个类:class Linear{private: double slope; double y0;public: Linear(double s1_ = 1; double y_ = 0):slope(s1_),y0(y_) { } double operator()(double x) {

2020-08-03 10:05:07 128

原创 C++内存管理详解

C语言的内存管理交予用户。所以现在C语言的内存管理要靠用户的良好编码习惯。当然现在一般成熟的语言都有GC机制,即为垃圾回收机制。共同基类管理,内部加引用计数都可以实现GC机制。但是C++没有GC机制,最主要是没有共同基类,其次是垃圾回收机制占用系统开销降低性能,并且需要占用更多的内存。C++使用析构函数或者智能指针引用计数去管理内存资源的释放。智能指针**作用:**帮助开发者对动态分配对象(new)的生命周期进行管理。能够有效防止内存泄漏。**头文件:**memory分类:auto_ptr(

2020-08-02 21:06:58 187

原创 C++模板详解

参数化多态工具:可以使参数多态(根据指定参数类型多态处理)宏函数也是一种模板,但是不安全,并且不能实现复杂的函数。模板编程:为各种逻辑功能相同而数据类型不同的程序提供一种代码共享的机制。参数的多态(相同逻辑代码处理不同数据类型)函数模板函数模板支持重载。#include <iostream>#include <string>using namespace std;template <typename T>T add(T a , T b){ c

2020-08-02 20:59:52 90

原创 C++异常机制处理

一、异常的语法格式在C++中,异常的抛出和处理主要使用了以下三个关键字:try、 throw 、 catch.其格式如下:当我们在程序中想抛出一个异常时,可以这样:#include<iostream>#include<exception>using namespace std;int Div(int left,int right){ if(right==0){ throw exception("除数不能为0"); } return

2020-08-02 20:32:05 147

原创 C++文件操作

简单的文件I/O:要让程序写入文件,必须这样做:1.创建一个人ofstream对象来管理输出流;2.将该对象与特定的文件关联起来;3.以使用cout的方式使用该对象,唯一的区别是输出将进入的文件,而不是屏幕。要完成以上任务,首先应该包含头文件fstream,对于大多数的实现来说,包含该文件便自动包括iostream文件,因此不必显示包含iostream,然后声明一个ofstream对象:ofstream fout; //create an ofstream object named fo

2020-08-02 20:05:05 163

原创 C++RTTI(运行时类型识别)

通过RTTI,能够通过基类的指针或引用来检索其所指对象的实际类型。c++通过下面两个操作符提供RTTI。typeid:返回指针或引用所指对象的实际类型。dynamic_cast:将基类类型的指针或引用安全的转换为派生类型的指针或引用。对于带虚函数的类,在运行时执行RTTI操作符,返回动态类型信息;对于其他类型,在编译时执行RTTI,返回静态类型信息。当具有基类的指针或引用,但需要执行派生类操作时,需要动态的强制类型转换(dynamic_cast)。这种机制的使用容易出错,最好以虚函数机制

2020-08-02 13:52:53 266

原创 面向过程与面向对象

什么是面向过程?“面向过程”(Procedure Oriented)就是分析出解决问题所需要的步骤,然后用函数把这些步骤一步一步实现,使用的时候一个一个依次调用就可以了。"面向过程"就是汽车启动是一个事件,汽车到站是另一个事件。在编程序的时候我们关心的是某一个事件。而不是汽车本身。我们分别对启动和到站编写程序。类似的还有修理等等。什么是面向对象?面向对象是把整个需求按照特点、功能划分,将这些存在共性的部分封装成对象,创建了对象不是为了完成某一个步骤,而是描述某个事物在解决问题的步骤中的行为总结面向

2020-08-02 13:16:31 140

原创 C/C++关键字(static 和 const 和 extern)详解

static关键字1.C语言中static:用法1:函数内部声明的static变量,可作为对象间的一种通信机制如果一局部变量被声明为static,那么将只有唯一的一个静态分配的对象,它被用于在该函数的所有调用中表示这个变量。这个对象将只在执行线程第一次到达它的定义时初始化。用法2:局部静态对象对于局部静态对象,构造函数是在控制线程第一次通过该对象的定义时调用。在程序结束时,局部静态对象的析构函数将按照他们被构造的相反顺序逐一调用,没有规定确切时间。用法3:静态成员和静态成员函数如果

2020-08-01 16:19:01 336

原创 C++引用、内联函数以及string类

引用引用是C++语法做的优化,引用的本质还是靠指针来实现的。引用相当于变量的别名。引用可以改变指针的指向,还可以改变指针所指向的值。引用的基本规则:声明引用的时候必须初始化,且一旦绑定,不可把引用绑定到其他对象;即引用必须初始化,不能对引用重定义;对引用的一切操作,就相当于对原对象的操作。哪些地方可以引用?引用可以作形参(解决了传值和传地址的问题) void swap(int &a, int &b);做返回值(函数调用作返回值)引用是否占用内存控件?从使用角度

2020-07-31 19:11:59 229

原创 C++运算符重载,友元详解

运算符重载运算符重载的作用为什么会用运算符重载机制?用复数类举例Complex c3 = c1 + c2;原因 Complex是用户自定义类型,编译器根本不知道如何进行加减,于是编译器给提供了一种机制,让用户自己去完成,自定义类型的加减操作,这个机制就是运算符重载机制运算符重载的限制:不能进行重载的运算符:成员运算符,作用域运算符,条件运算符,sizeof运算符,typeid(一个RTTI运算符),const_cast、dynamic_cast、reinterpret_cast、static_

2020-07-31 14:53:53 1518

原创 C++继承与多态详解

一、前言继承是c++语言一个重要的机制,该机制自动地为一个类提供来自另一个类的操作和数据结构,这使得程序员只需在新类中定义已有的类中没有的成分来建立一个新类。二、继承解释继承是类的重要特性。A类继承B类,我称B类为“基类”,A为“子类”。A类继承了B类之后,A类就具有了B类的部分成员,具体得到了那些成员,这得由两个方面决定:继承方式基类成员的访问权限三、三种继承方式1.公有继承方式(public)#include<iostream>#include<string&gt

2020-07-25 23:06:11 379

原创 C++构造函数、析构函数、this指针、初始化列表

构造函数一、 构造函数是干什么的功能:是执行与构造函数相反的操作:释放对象使用的资源,并销毁非static成员。构造函数的几个特点: 1.函数名和类名必须一样,没有返回值。 2.当没有显式的定义构造函数时,系统会自己生成默认的构造函数。 3.构造函数可以重载。class Stack{public: // 构造函数类名为Stack // 特点:以类名作为函数名,无返回类型 Stack() {

2020-07-22 17:25:32 541

原创 C++四种类型转换详解

C语言强制类型转换:TYPE b = (TYPE)aC++强制类型转换有4种:const_cast: 去const属性。static_cast :静态类型转换,如int转换成char。dynamic_cast :动态类型转换,如子类和父类之间的多态类型转换。reinterpret_cast :仅仅重新解释类型,但没有进行二进制的转换。4种类型转换的格式,如:TYPE B = static_cast(TYPE)(a)。const_castconst_cast是一种C++运算符,主要是用来去除

2020-07-22 10:53:35 842

原创 蓝桥杯往年例题之螺旋折线

题目:如图p1.png所示的螺旋折线经过平面上所有整点恰好一次。对于整点(X, Y),我们定义它到原点的距离dis(X, Y)是从原点到(X, Y)的螺旋折线段的长度。例如dis(0, 1)=3, dis(-2, -1)=9给出整点坐标(X, Y),你能计算出dis(X, Y)吗?解法思路:通过图片可以观察到,折线的长度可以看成是很多个长度为1的折线的累加,从原点开始,可以看出来每次长...

2020-04-16 16:58:54 609 1

原创 C/C++常用进制转换笔记

1.任意进制转化为十进制方法1 strtol()函数(百度百科) (输入char型 输出int型) 函数原型:long int strtol(const char *nptr, char **endptr, int base)base是要转化的数的进制,非法字符会赋值给endptr,nptr是要转化的字符,例如:#include<cstdio>int main() ...

2020-04-11 17:57:41 412

原创 系统编程之高并发服务器(epoll和select)

1.select基础操作在监听队列listen之后定义fd_set类型的两个集合readfd和tmpfd,定义一个int型的数组fdx[1024]并初始化为0;用FD_ZERO(&readfd)函数清空集合;用FD_SET(sockfd,&readfd)函数把sockfd添加进集合定义int型maxfd等于sockfd;在while循环里面用selec...

2020-04-07 18:33:10 448

原创 系统编程之UDP网络编程(循环服务器)

1.服务器基本操作1.用socket()函数创建socket,返回值为socket的标识符sockfd,这个标识符在后面都会用到2.用结构体sockaddr_in去保存服务器信息(协议,端口,ip)联合体成员:struct sockaddr_in sever_addr{sever_addr.sin_family //协议sever_addr.sin_port //端口,一般大于1024...

2020-04-04 15:43:30 231

原创 系统编程之TCP多线程服务器

并发服务器应用于一个服务器可以同时相应多个客户端,具体步骤就是在一个循环里面,如果接受连接,就创建一个线程,然后在该线程函数里面完成对应的客户端要做的事以下是普通TCP服务器和多线程并发服务器的代码1.普通服务器:#include <stdio.h>#include <stdlib.h>#include <string.h>#include <...

2020-04-04 13:54:43 301

原创 系统编程之TCP网络编程(socket)

基本常用函数:1.socket()函数函数原型: int socket(int sockfd, int type, int protocol);功能: 用于创建一个socket描述符(socket descriptor),它唯一标识一个socket。这个socket描述字跟文件描述字一样,后续的操作都有用到它,把它作为参数,通过它来进行一些读写操作。参数:第一个参数: 即协议域,又称为协...

2020-04-01 23:59:36 143

原创 多线程同步之互斥锁与条件变量

互斥锁1.互斥锁标识符: pthread_mutex_t 类型, 如pthread_mutex_t mutex,那么mutex就是互斥锁的标识符;2.互斥锁初始化: 一般用在main函数开头,函数原型:pthread_mutex_init(pthread_mutex_t *restrict mutex, const pthread_mutexattr_t *restric attr);第一...

2020-03-30 18:24:54 174

原创 系统编程之线程

1.创建线程pthread_t tid;(创建线程号,多个线程可以用数组来实现,如pthread_t tid[3]);函数原型: int pthread_create(pthread_t tid,const pthread_attr_t restrict_attr,void(start_rtn)(void),void *restrict arg);参数:第一个参数为指向线程标识符的指针...

2020-03-29 00:19:28 111

原创 系统编程之信号量

信号量的工作原理由于信号量只能进行两种操作等待和发送信号,即P(sv)和V(sv),他们的行为是这样的:P(sv):如果sv的值大于零,就给它减1;如果它的值为零,就挂起该进程的执行V(sv):如果有其他进程因等待sv而被挂起,就让它恢复运行,如果没有进程因等待sv而挂起,就给它加1.举个例子,就是两个进程共享信号量sv,一旦其中一个进程执行了P(sv)操作,它将得到信号量,并可以进入临界...

2020-03-28 22:28:43 249

转载 信号量机制(P,V操作)

概述:用户进程可以通过使用操作系统提供的一对原语来对信号量进行操作,从而很方便的实现了进程互斥、进程同步。信号量其实就是一个变量(可以是一个整数,也可以是更复杂的记录型变量),可以用一个信号量来表示系统中某种资源的数量,比如:系统中只有一.台打印机,就可以设置一个初值为1的信号量。原语是一种特殊的程序段,其执行只能一气呵成,不可被中断。原语是由关中断/开中断指令实现的。软件解决方案的主要问题...

2020-03-22 21:07:21 8817 2

原创 系统编程之共享内存

1.概述共享内存是进程间通信中最简单的方式之一。共享内存允许两个或更多进程访问同一块内存,就如同 malloc() 函数向不同进程返回了指向同一个物理内存区域的指针。当一个进程改变了这块地址中的内容的时候,其它进程都会察觉到这个更改。2.共享内存的特点:1.共享内存是进程间共享数据的一种最快的方法。一个进程向共享的内存区域写入了数据,共享这个内存区域的所有进程就可以立刻看到其中的内容。2...

2020-03-21 23:40:21 333

原创 系统编程之消息队列

1.创建(获取)消息队列msgget()函数声明: int msgget ( key_t key, int msgflg )返回值: message queue identifier on success失败的话返回-1第一个参数:可以自己在开头用define宏定义一个任意数字第二个参数,msgflg 控制的。它可以取下面的几个值:IPC_CREAT :如果消息队列对象不存在,则创建...

2020-03-20 00:18:34 239

原创 有名管道通信(纯代码)

1.write#include <stdio.h>#include <sys/types.h>#include <sys/stat.h>#include <fcntl.h>#include <unistd.h>#include <stdlib.h>#include <string.h>int ma...

2020-03-19 21:50:25 354

转载 系统编程之管道通信(无名管道和有名管道)

1.无名管道**无名管道和有名管道是Linux系统内核的特殊文件,用于进程之间的通信。** 无名管道相当于一个队列结构,fd[1]为写入端(入队),fd[0]为读出端(出队)。其中信息读出后即删除,再次读取时即为下一个信息。函数形式: int pipe(int fd[2])功能: 创建无名管道文件。无名管道是一个特殊文件,不可由open函数创建。参数: fd[2]有两个成员 fd[...

2020-03-17 11:05:24 584 1

原创 虚拟机安装和使用时的常见问题整理

1.bash: gcc: command not found的问题:Centos(Rehat系列)系统下载gcc命令:yum install gccUbuntu系统下载gcc命令:apt-get inatall gcc2.No manual entry for open in section 2的问题man手册安装:yum install man-pages3.用户名修改:passwd输...

2020-03-17 10:38:49 292

原创 编程之进程控制编程

linux命令:打印正在运行的进程(ps -elf),通过名字搜索进程:(ps -elf | grep (关键字));1.获取ID(getpid(void)) 用getpid来获取进程id,getppid来获取父进程id 1 #include <stdio.h> 2 #include <sys/types.h> 3 #include <uni...

2020-03-14 21:11:55 205

原创 标准IO以及标准IO实现拷贝

1标准IO 所用函数为fopen,fclose,fwrite,fread,以及fseek等,优点是效率更高。 1 #include <stdio.h> 2 #include <stdlib.h> 3 #include <string.h> 4 int main() 5 { 6 //FILE *fp = fopen("hello.c"...

2020-03-13 23:28:12 338 1

原创 实现文件io拷贝

思路就是定义一个字符串数组,然后从原文件不停的读,再不停的写到新的文件。当读完的时候返回值为0,跳出循环。需要注意的地方是读的时候要读的个数比总长度少一个ret = read(fd_from,buf,sizeof(buf) - 1); 1 #include <stdio.h> 2 #include <stdlib.h> 3 #include <unist...

2020-03-11 22:12:23 163

原创 linux系统编程之文件IO操作

主要有创建文件open,写文件write,和读文件read。1.open:调用open有两种调用函数一种是有两个参数open(“hello.txt”, O_RDWR)(文件名,打开方式(只读,只写或者可读可写));另一种是三个参数也就是创建一个文件并打开 open(“hello.c”, O_RDWR | O_CREAT | O_EXCL, S_IRUSR | S_IWUSR) (文件名,打开方...

2020-03-11 01:02:36 144

原创 静态成员变量和静态成员函数

1 #include <iostream> 2 #include <vector> 3 #include <cstring> 4 #include <cstdlib> 5 using namespace std; 6 7 class Student 8 { 9 public: 10 static int ...

2020-02-23 16:50:42 75

原创 类和对象

1 #include <iostream> 2 #include <string> 3 #include <vector> 4 using namespace std; 5 6 struct student 7 { 8 string name; 9 double score; 10 void prin...

2020-01-22 14:17:34 54

原创 C++指针和动态内存分配

1.指针 1 #include <iostream> 2 #include <string> 3 #include <vector> 4 using namespace std; 5 int main() 6 { 7 int arr[] = {1, 2, 3, 4}; 8 int a = 3; 9 int...

2020-01-19 16:29:03 328

原创 C++用户定义类型string和vector

1.string1 #include <iostream> 2 #include <string> 3 using namespace std ; 4 5 int main() 6 { 7 string s = "hello", s2("world"); 8 cout << s.size() <<...

2020-01-19 13:46:01 357

原创 C++ 默认形参以及函数重载和函数模板

1.默认形参 1 #include <iostream> 2 using namespace std ; 3 4 int add(int x, int y = 3, int z = 4) 5 { 6 return x + y + z; 7 } 8 9 int main() 10 { 11 cout << add(2...

2020-01-18 14:26:17 120

base_linux.tar.gz

空格很重要!有的符号左右需要空格键隔开,有的不能加空格,程序运行出现问题首先看代码其次看空格,今天运行greet程序总是报错,百度之后查到是虚拟机中少了个jdk文件,下载进去还是没用,后来在同学的帮助下发现了原来shell代码开头不可以用#注释,可能是因为开头是要用#!/bin/bash,除了开头其他地方都可以用,下面是今天的学习记录: 1、编写一个名为iffile程序,它执行时判断/bin目录下date文件是否存在?

2019-10-21

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除