
C++
文章平均质量分 89
c++诞生于20世纪80年代,作为一门面向对象语言,C++不仅向下支持C函数式编程,更支持面向对象编程和泛型编程,因此C++是一门比较复杂的语言。最常用的C++标准是C98,即1998年推出的,目前使用比较多的就是C98+C11,一起领略C++的编程之美。
Qt上位机开发
从事上位机软件商业应用开发6年,精通Qt编程,熟悉C++语言、C语言、TCP/UDP编程、多线程编程
展开
-
c++ 初始化成员列表
在c++中,初始化一般有两种方式,一种在构造函数内通过赋值初始化,一种是通过初始化列表初始化。下面通过对两者进行比较,来分析初始化成员列表和构造函数内赋值的优缺点。一、构造函数内赋值:class Text {public: Text() { std::cout << "I'm Text Construction" << std::endl; } Text(int num):_num(num) { std::cout << "I'm Text原创 2020-12-01 23:05:18 · 424 阅读 · 1 评论 -
0x752940B2(KernelBase.dll)(xxx.exe中有未经处理的异常:0xE0000008)
今天在vs使用qt scaled扩大图片的时候,偶尔崩溃,提示这个错误。原因:WIN32程序内存不足解决方法:不要scaled图片过大一劳永逸的办法:改为x64编译,麻烦的就是需要提供各种依赖库的64位版本,win32内存上还是有很多不足的...原创 2020-11-16 14:31:02 · 5329 阅读 · 1 评论 -
平时写c++程序需要注意什么
记一些几年前写c++经常会犯的一些错误,想到了其他的后面再加上1、变量、函数命名不规范。如果一个变量命名随意,比如表示一个学生的年纪,如果这样定义int a;相信一个月后自己再看代码,都不知道a表示什么意思,如果用int age; 来表示,就清晰很多了。再说函数,如果需要一个连接数据库的函数,写成connect();这是connect什么呢。如果写成connectDatabase()就很清晰了。2、传递指针没有判断是否为空。传递对象、变量没有判断是否有效。如果有一个接口是 void原创 2020-08-04 16:28:26 · 994 阅读 · 2 评论 -
读c++ primer 5
作为一个非科班的码农,有时候会有种力不从心的感觉,说到底还是基础不牢固,很多印象很模糊,万丈高楼平地起,希望自己切勿好高骛远,趁着这段时间,总结一下自己掌握得还不够深刻的知识点。一、引用1、引用并非为对象,它只是为对象取了另外一个名字。定义了一个引用后,对其所进行的所有操作,都是在与之绑定的对象上进行的。2、引用必须初始化,一旦定义了引用,就无法令其再绑定到另外的对象。3、每个引用标识符都必须以符号&开头。二、指针和引用的不同点1、指针本身就是对象,但是引用不是2、允许对原创 2020-07-29 16:21:51 · 258 阅读 · 0 评论 -
c++深拷贝与浅拷贝
直接看代码更直观,注释都在代码里#include <iostream>using namespace std;//浅拷贝democlass A{public: ~A() { cout << "A析构函数" << endl; } A() :m_num(0){} void setNum(int num){ m_num = num; } int getNum() { return m_num; }private: int m_原创 2020-07-24 17:32:53 · 213 阅读 · 0 评论 -
c++函数模板与类模板
模板是c++泛型编程的基础,它可以以独立于任何特定类型的方式去编写代码。函数模板先来看一个函数模板的定义和使用template <typename T>T const add(T const &a,T const &b){ return a + b;}int main(){ cout << "add(5,6)=" << add(5, 6) << endl; //输出11 return 0;}声明模板的一般原创 2020-07-17 19:08:44 · 432 阅读 · 1 评论 -
std::map容器
map,自动排序。#include <iostream>#include <map>using namespace std;typedef map<string, string> MMAP;void printf_map(MMAP map){ MMAP::iterator iter = map.begin(); for (; iter != map.end(); iter++) { cout << iter->first.原创 2020-05-29 00:06:57 · 467 阅读 · 0 评论 -
std::vector容器
coding...#include <iostream>#include <vector>using namespace std;void printVecData(vector<int> &vecData){ //遍历元素 vector<int>::iterator iter = vecData.begin(); for (; iter != vecData.end(); iter++) { cout <<原创 2020-05-26 00:17:04 · 365 阅读 · 0 评论 -
基于原生c++代码实现的Http下载程序
前天用Qt做了一个Http下载工具,但是使用的是Qt的ApI进行开发。所以顺便用纯c++撸了一个,造几个轮子试试效果。目前基本实现主要功能,但是暂时没有提供断点续传和Https的url下载。只支持对Http的url进行下载。一、gitHub地址二、功能可以输入Http的url进行在线下载。三、目前存在的问题暂时没有提供断点续传和Https的url下载,大家可以自行扩展。四、界面效果五、主要代码...原创 2020-05-24 18:26:48 · 1424 阅读 · 1 评论 -
c/c++通过域名解析ip地址
void getIp(char *domain,char *ip){ struct hostent host=*gethostbyname(domain); int i; for(i=0;host.h_addr_list[i];i++) { strcpy(ip,inet_ntoa(*(struct in_addr*)host.h_addr_li...原创 2019-08-23 09:43:55 · 3699 阅读 · 0 评论 -
再读Effective C++ 有感
最大的感受是每一次读都是不一样的体会,刚接触c++不久的那段时间,读起来真是晦涩难懂,当初还是把c++当做c with class来玩,根本没有oop的概念,至于面向对象的三大特性,也是真的一看就会,结果一敲就蒙。毕业到现在,用c++也快两年了,作为非科班的我,用了一些野路子,踩了一些坑,到最后发现,很多坑都是这本书基本都有提到,在此强烈建议大家多搭项目,写框架、写代码,然后再来读这本书,收获完全不一样,就像古人说的,纸上得来终觉浅,觉知此事要躬行。躬行感觉还不够,还需要那句,无他,唯手熟尔。个原创 2020-05-17 23:32:39 · 269 阅读 · 0 评论 -
c++测试代码块所需时间(windows)
#include <iostream>#include <windows.h>using namespace std;int main(){ double run_time = 0.0; //运行时间 _LARGE_INTEGER time_start; //起始时间 _LARGE_INTEGER time_over; //结束时间 _LARGE_INTEGER freq; double dqFreq; //计时器频率 QueryPerformance.原创 2020-05-15 23:08:44 · 270 阅读 · 0 评论 -
C/C++实现字符串的反向输出
这个东西没啥好说的,直接撸代码吧,主要是之前笔试遇到过,记录一下以后复习用。void reverse_str1(char *s){ int len = strlen(s); int mid = len / 2; for (int i = 0; i < mid; i++) { char t = s[i]; s[i] = s[len - i - 1]; s[len -...原创 2020-03-15 22:36:39 · 1128 阅读 · 0 评论 -
c++11实现的多线程管理
最近面试被问到c++11的一些特性,有点模糊了,撸个c++11实现的简易线程池玩玩,强化一下记忆。目录threadManage.hthreadManage.cppmain.cppthreadManage.h#pragma once#include <thread>#include <vector>#include <queue>...原创 2020-03-16 02:00:07 · 710 阅读 · 0 评论 -
c++为什么基类的析构函数需要加上virtual
为什么基类的析构函数需要加上virtual?c++面试基本都会问到的问题,我之前有很多次没答全,主要还是懒,忘记以后,没有手动去敲一下。这里做一个总结,纪念当初面试踩过的一些坑。先看下面这个简单的栗子;基类析构函数没有加virtual时#include <iostream>using namespace std;class A{public: A() {...原创 2020-03-13 00:04:29 · 495 阅读 · 0 评论 -
c++类型转换运算符详解
c++提供了4个类型转换运算符,使得转换过程更加的规范。分别是,static_cast,const_cast,dynamic_cast,reinterpret_cast1、static_cast语法:static_cast <type-name>( expression )static_cast用于类型转换,但运行时没有类型检查来保证转换的安全性。主要有以下几种用途...原创 2020-03-08 15:37:34 · 1087 阅读 · 0 评论 -
std::string的replace用例(替换字符串或容器中的某个元素)
栗子1:std::string str1="hello,world,"//把最后一个逗号替换成换行符 str1.replace(str1.find_last_of(","),1,"\n"); 输出结果:栗子2:std::string str2="c++ is a language";//把某个字符替换成新字符,c++替换为javascriptstr2.replace...原创 2020-02-15 23:35:08 · 20284 阅读 · 1 评论 -
c++11单例模式创建线程
#include<thread>#include<iostream>using namespace std;class Test{public: void say(){ cout<< "hello c++11" <<endl; } static void startThread(){ ...原创 2019-10-14 10:42:30 · 351 阅读 · 0 评论 -
c++11使用线程
由浅入深#include<thread>#include<iostream>using namespace std;//无参线程void thread_t1(){ cout<<"hello c++11 thread"<<endl;}//带参线程void thread_arg(const int a,const in...原创 2019-10-14 09:59:11 · 170 阅读 · 0 评论 -
获取HTTP响应报文中的状态码
如从 “HTTP/1.1 200 OK” 中获取200。//buf 模拟响应头char buf[]="HTTP/1.1 200 OK";int code=-1;char *p=strstr(buf,"HTTP/");if(p) sscanf(p,"%*s %d",&code); 通过strstr(str1,str2)函数判断HTTP/是不是buf的子串,...原创 2019-08-23 09:10:56 · 1791 阅读 · 0 评论 -
说一下#if 1 #else #endif的用法
# if 1A#elseB#endif当为#if 1时,执行A,不执行B。当为#if 0时,执行B,不执行A。#endif 不可省略原创 2019-07-13 11:03:03 · 4396 阅读 · 0 评论 -
c++字节对齐规则
先看下面这个类class MyClass //字节对齐的规则:按当前类中元素所占最大字节对齐{public: char a; //1字节 int b; //4字节 static void hello(){ int i; }; virtual void hello1() = 0; virtual void hello2(); //每个类都有一个虚函数表,由专门的虚函数指针指向该...原创 2019-04-16 17:29:19 · 356 阅读 · 0 评论 -
std::vector与std::list的区别
vectorvector是一种顺序容器,可以存放任意类型的对象,如int、double、bool等它是一个动态的数组:即不需要像普通数组(如int a[10])一样预先分配元素个数,它可以根据插入的元素的多少来扩充对应的容量。其实质为,把之前的数据复制到新的数组中,再把先前的内存释放,这种方式可以很大的减少对内存的消耗。因为数组是一组地址连续的存储空间,所以vector可以快速访问任意...原创 2019-03-22 23:54:22 · 4630 阅读 · 0 评论 -
c++按值传递、引用传递及指针传递的理解
举个栗子,分析一下C++按值传递、引用传递和指针传递的区别:#include "transmit.h"#include <iostream>using namespace std;//按值传参void changeValue(int x){ x = x + 5; cout << "地址是:" << &x; cout <&l...原创 2019-01-07 18:08:41 · 1672 阅读 · 0 评论 -
面试题之随机答题(c++)
对随机生成的运算式进行计算,如果回答正确,加分,若错误,会扣分。答题失败后会给第二次机会答题,再失败则扣除对应分数并提示正确答案。并有答题时间统计。下面是程序和说明(环境:VS2013)project.h#ifndef __PROJECT_H__#define __PROJECT_H__#include <iostream>#include <ctime&g...原创 2019-01-02 15:08:30 · 1288 阅读 · 0 评论 -
c++重载==运算符(结构体)
开发时需要判断结构体是否相等,可以通过重载==运算符来实现。举个例子:struct Point{ double x; double y; double z; //==运算符重载 bool operator==(const Point &p) { return(x=p.x && y=p.y &...原创 2019-01-02 11:39:18 · 8179 阅读 · 2 评论 -
c++中new的理解
前几天复习C++看到下面注释的语句char *p=NULL; p=new char[20]; //为变量请求内存对“为变量请求内存”这句话不是很认同char *p=NULL; 此时p是存储在栈上,通过cout<<sizeof(p);可以发现p占4个字节的内存大小。所以 p=new char[20];应该是“在堆中申请20个char类型而且地址连续的内存空间,...原创 2018-09-07 09:24:25 · 481 阅读 · 1 评论 -
visual studio 2013下 创建C++动态库及调用
在日常开发中,动态库的作用不言而喻,下面整理一下如何在VS2013下创建动态库并调用。一:打开VS2013,点击文件,新建,项目。或者使用快捷键CTRL+SHIFT+N。如图所示,输入项目名称和解决方案名称。二:点击确定,如下图勾选后点完成。三:右键MyFirstDLL,点添加,选择新建项,新建Test.h头文件以及Test.cpp后,编辑内容如下:(注意MYFIRST...原创 2019-05-25 16:56:16 · 2250 阅读 · 0 评论 -
c++接口与虚析构函数作用
接口是一种编程思想,定义了一种编程规范,同时可以增强扩展性(多态),在C++中,某些抽象类也称为接口类,声明一个接口类需要满足以下几个条件:1、类中所有的成员函数都是纯虚函数,2、没有定义成员变量。因为接口只负责描述类的行为和功能,不需要实现,而是由它的派生类来实现。至于普通抽象类,只要有一个成员函数被声明为纯虚函数,那它就是抽象类,这是和接口不一样的地方。下面总结一下接口的实现...原创 2019-07-13 10:39:56 · 1494 阅读 · 0 评论 -
c++多态
最近做项目需要自己搭框架,之前半年都是写业务逻辑代码,很多C++的特性都有点模糊了,现在先复习一下c++的多态。c++实现多态的基础是继承,可通过声明基类指针,指向子类对象后来实现。作为面向对象编程的三大思想之一,多态提高了程序的复用性和可扩展性。c++通过virtual关键字来实现多态,多态意味着在调用成员函数时,会根据调用函数的对象类型来执行不同的函数。Man基类中的say函数未加vi...原创 2019-07-01 00:11:53 · 332 阅读 · 0 评论 -
c++回调函数
什么是回调函数:回调函数就是一个通过函数指针调用的函数。如果你把函数的指针(地址)作为参数传递给另一个函数,当这个指针被用来调用其所指向的函数时,我们就说这是回调函数。回调函数不是由该函数的实现方直接调用,而是在特定的事件或条件发生时由另外的一方调用的,用于对该事件或条件进行响应。-此处摘自百度百科个人理解:回调函数其实就是普通的函数,侧重在于,我们需要把函数指针传递给另一个函数(通常...原创 2019-07-18 22:37:44 · 809 阅读 · 0 评论 -
c++封装HTTP GET请求访问网站
运行环境:VS2013 功能:模拟浏览器访问百度具体代码如下#include <iostream>#include <WinSock2.h>#include <WS2tcpip.h>#include <sstream>#pragma comment(lib,"ws2_32.lib")int main(){ //初始化配置...原创 2019-07-20 00:18:43 · 2564 阅读 · 0 评论 -
记录开发中遇到的一次c++栈溢出
昨天写了一个接口,编译通过无错误警告,然后使用静态类对象调用它,结果发生了段错误,Segmentation fault。起初以为是空指针导致,但是调试的时候,发现指针并没有在途中被置为空。更奇怪的是,打断点发现还没有进入接口,程序就蹦了。于是把接口代码全部注释掉,再运行,是ok的。说明不是类对象的问题。是函数代码存在问题。终于我发现我写了一个很傻×的代码。申请了占据1M的数组来接收数据...原创 2019-07-27 09:42:55 · 384 阅读 · 0 评论 -
c++之const常量与指针
当需要某个变量的值不能被改变时,可以用const关键字修饰变量的类型。如const int bufSize=1024。这时候bufSize就是一个常量,所有试图修改bufSize值的行为都是不被允许的。而且编译器在编译的过程中,会把用到bufSize变量的地方全部替换为1024,下面总结一下const关键字的一些性质和应用场景。1、const修饰的对象必须被初始化const in...原创 2019-08-05 22:41:16 · 320 阅读 · 0 评论 -
c++引用总结
引用:引用是变量的别名。打个比方,比如科比外号小飞侠,那么小飞侠就是科比的别名,即引用。int num=10;int &re=num; //re是num的别名re=50;cout<<"num="<<num<<endl; //输出50int &表示使用引用数据类型,上面的re就是num的别名,对re赋值50,就是对n...原创 2019-08-12 23:47:35 · 297 阅读 · 0 评论 -
c++中*p=a和p=&a的区别
运行环境:VS2013,语言:C++。#include <iostream> using namespace std; int main(){ int a = 10; int *PA = new int; *PA = a; cout << "*PA is:" << *PA << endl; /...原创 2018-09-19 18:33:51 · 36016 阅读 · 1 评论