C++
文章平均质量分 56
疯丶
这个作者很懒,什么都没留下…
展开
-
C++实现方针顺时针旋转
目录题目描述输入描述输出描述示例:实现思路代码实现题目描述输入一个N阶方阵(0<N<10),输出此方阵顺时针旋转M(0<=M<=10000)次后的方阵旋转举例:如下四个三阶方阵从左到右为数字围绕中心顺时针旋转1 2 34 5 67 8 97 4 18 5 29 6 39 8 76 5 43 2 13 6 92 5 81 4 7输入描述第一行输入一个正整数N(0<N<10)接下来的N行,每行N个整数,用空格分开,为方阵的数据最后一行输入原创 2021-09-12 23:15:05 · 2384 阅读 · 0 评论 -
C++强制类型转换
目录C语言的强制类型转换C++的强制类型转换static_castdynamic_castconst_castreinterpret_castC语言的强制类型转换一般形式(类型说明符)(表达式)功能把表达式的运算结果强制转换成类型说明符所表示的类型。例如(int)(x+y)把x+y的结果转换为整型。自动转换自动转换是在源类型和目标类型兼容以及目标类型广于源类型时发生一个类型到另一类的转换。注意表达式要用括号括起来,否则就只转换最近的单个变量,如(int)x+y就只把x转换成int型原创 2021-04-24 11:52:56 · 332 阅读 · 0 评论 -
C++之虚析构函数
文章目录析构函数虚析构函数析构函数我们知道,构造函数是用来在创建对象时初始化对象的,做一些赋初值等操作,那么相对的,析构函数是为了在结束对象的生命周期时做善后工作,比如在构造函数中申请的内存就需要在析构函数中释放(过程中根据情境已经做了特殊处理释放了内存的除外),构造和析构不需要主动调用,由系统自动调用,当类中没有析构函数时,系统会自动生成,类的析构函数主要是为了释放内存资源,析构函数如果不被...原创 2020-01-31 13:35:11 · 221 阅读 · 0 评论 -
C++之类的前置声明
文章目录什么是前置声明为什么要引入前置声明前置声明的应用场景怎么使用前置声明前置声明的优点前置声明的缺点什么是前置声明前置声明(Forward Declaration),顾名思义,就只是一个声明,并不包含其定义。为什么要引入前置声明试想一下,如果需要在头文件A.h中使用另一个头文件B.h中的类B,有哪些做法?1.把类B直接挪到A.h中(完全不推荐)2.在A.h中包含B.h(写法为#in...原创 2020-01-30 16:12:30 · 1846 阅读 · 0 评论 -
QT+VS点击按钮弹出新窗口的实现
1.建立主工程:新建一个Qt工程作为主工程,取名为newWidgetDemo; 2.建立新窗口:project->右键->添加->类->Qt5 Classes->Qt5GuiClass->添加->给新窗口起名为myWidget->finish,这一步完成后,可以看到主工程中多了如下几项:xxx.ui、ui_xxx.h、xxx.h、xxx.cpp、moc_xxx.cpp; 3原创 2017-07-28 09:56:35 · 11411 阅读 · 4 评论 -
C++笔记之CopyFile、MoveFile的用法
1.含义CopyFile(A, B, FALSE);表示将文件A拷贝到B,如果B已经存在则覆盖(第三参数为TRUE时表示不覆盖)MoveFile(A, B);表示将文件A移动到B 2.函数原型CopyFile:MoveFile: 由函数原型可以看出,这两个函数的前两个输入参数都为LRCWSTR类型,如果我们定义的是char*,记得转换成LRCWST原创 2017-08-29 09:25:27 · 38562 阅读 · 6 评论 -
Qt翻译文件结合VS实现语言切换(多语言国际化)
Qt多语言国际化主要体现在界面的语言切换,语言切换的主体,即界面中需要翻译的元素,要放在“QApplication::translate()”函数内,或更方便一些的“QObject::tr()”、“QObject::trUtf8()”函数;确定了翻译的主体后,就要对这些待翻译元素进行翻译,完成翻译后会生成qm文件;当界面要切换语言时,只需要加载qm文件即可。翻译的过程主要分三步:1.原创 2017-08-04 14:50:37 · 8403 阅读 · 2 评论 -
C++笔记之前向声明
前向声明即在定义之前先声明,其主要作用在于,避免了当两个类相互调用时include出现循环导致的编译错误,在类很多时,我们并不能确保某两个类一定不会互相调用,为了避免这种潜在的错误,最好使用前向声明,写法如下://Test.hClass ClassA;//向前声明类ClassAClassA *mClass;//此时只能定义ClassA的指针和引用,在Test类中声明一个ClassA的指针原创 2017-09-29 09:23:28 · 434 阅读 · 0 评论 -
Qt5笔记之QGraphicsScene QGraphicsView QGraphicsItem
1. 三者之间的关系:(1) QGraphicsScene是QGraphicsView中的场景:使用QGraphicsView::setScene()将scene加入到view中;(2) QGraphicsScene又是QGraphicsItem的容器:使用QgraphicsScene::addItem()将item加入到scene中,或addRect()之类的添加图形函数,利用这原创 2017-09-29 09:25:25 · 6340 阅读 · 0 评论 -
C++笔记之抽象类与接口类
1.虚函数与纯虚函数:virtual void func1();//虚函数Virtual int func2(){return 0;}//虚函数virtual void func3() = 0;//纯虚函数(1)虚函数可以在基类中实现,也可在派生类中实现,与普通函数的区别在于,虚函数是为了可以用基类的指针调用子类中重写的这个函数;(2)纯虚函数不能在基类中实现; 2.抽象类原创 2017-09-29 09:29:39 · 329 阅读 · 0 评论 -
Qt5笔记之Qt5插件的生成与加载及json文件的读取
一、前言1. Qt Plugin按照应用场景分两种类型:(1)The High-Level API:用于扩展Qt本身的功能,需放在Qt安装目录下的指定目录里;(2)The Lower-Level API:用于扩展Qt应用程序的功能;Qt Plugin按照类型又可分为两种:动态插件(dll)和静态插件(lib);以下说的均为The Lower-Level API的动态插件。2原创 2017-09-29 09:30:41 · 6061 阅读 · 1 评论 -
error MSB6006: “cmd.exe”已退出,代码为3
“cmd.exe”已退出,代码为9009,多为路径问题,解决方法可参考这里(链接)“cmd.exe”已退出,代码为1,多为moc_文件冲突,解决方法可参考这里(链接)“cmd.exe”已退出,代码为1,如果发生在QT+VS开发环境下的工程编译,解决方法:项目右键->Convert Project to QMake Generated Project,然后重新编译即可:原创 2017-07-21 11:42:36 · 28631 阅读 · 16 评论 -
operator+单参数和双参数的两种写法
C++运算符重载在自定义类中经常会用到,比如当我们自定义一个点类Point,想对Point类对象进行加减比较判断等操作时,就需要对相应运算符进行重载。 以operator+为例,通常直观的感觉操作数就是应该有两个,写法如下:Point operator+(const Point &p1,const Point &p2)const; 关于上一句operator重载的格式声原创 2017-07-27 09:05:54 · 13362 阅读 · 6 评论 -
Qt样式表qss的两种用法
Qt的qss(样式表)使我们能够自定义控件的显示效果,令界面看起来不再单调,更具个人风格,而在VS+Qt的开发环境下,实现样式表主要有两种方式,下面以QPushButton为例介绍这两种实现方式:1.通过Qt Designer修改样式表 在VS下新建Qt工程,会自动生成一个.ui文件,用Qt Designer打开后可以拖动控件摆放,回到VS中编译,刚才摆放的控件会自动在ui_xxxx原创 2017-08-04 09:56:34 · 1845 阅读 · 0 评论 -
C++ 由Log日志输出理解回调函数
关于回调函数的概念,之前有写过(传送点),这里不再赘述。 本文结合Log日志输出,进一步理解回调函数的执行过程。 首先附上demo的可运行程序代码(下载传送点),运行环境为VS2015+Qt5.8.0,不一样的自行修改即可,旨在帮助初学者走通程序,理解过程,也不用在后文中粘大段的代码... 回调的两个主体为Test类和Log类,在Log类中定义函数指针类型:typedef v原创 2017-08-01 10:54:48 · 2659 阅读 · 0 评论 -
QT读取位置时发生访问冲突
在VS下编写QT小程序测试各种输出时,报了一个很常见又很讨厌的错误“...读取位置...时发生访问冲突”,调试跟进也没有指针乱指、内存未分配、只读却写等问题,在已经放弃了这种输出方法换下一种时,发现UI的参数每初始化一下就会输出一次,但是原本应该是全部初始化后才输出一次的。于是回过头去看UI部分,原来是connect()的位置问题...connect()的位置很可能会导致这种访问冲突问题,当c原创 2017-03-16 10:08:19 · 10692 阅读 · 8 评论 -
QT属性表之修改属性值与输出日志的结合
QT属性表控件,使用时需要将文件位置加入附加包含目录中,同时向项目中添加8个头文件(.h)及实现(.cpp),如下图:然后会生成一堆moc文件,如下图:注意要将最下的三个的属性页中的项类型改为自定义生成工具(分别选中这三项,然后右键->属性->常规),然后自定义生成工具(右键->属性->自定义生成工具)改为对应的moc生成工具及宏,自定义生成工具对应的四项都需要修改(不会修原创 2017-03-16 11:06:01 · 2670 阅读 · 0 评论 -
C++字符串拼接
输入:两个字符串char* ch1,ch2输出:ch1与ch2拼接在一起的字符串char* ch3#include "stdafx.h"#include #include "Circle.h"using namespace std;int main(){ char *ch1 = "link "; char *ch2 = "test"; char *ch3 = (char原创 2017-03-16 11:30:50 · 12125 阅读 · 0 评论 -
could not find or load the Qt platform plugin windows的解决方法
VS+Qt5环境下建立一个Qt工程,在本机运行没问题,可是把.exe和用到的.dll打包发到别人电脑上却运行不了,报错如下:为什么会这样?这是因为程序运行需要Qt本身的一些dll,把这些缺失的dll补上就可以了。 需要注意的是:一般遇到这个报错,是缺少plugins文件夹下的platforms和imageformats两个文件夹内的dll,但是一定不要直接把这两个文件夹下的原创 2017-05-03 10:37:18 · 36124 阅读 · 12 评论 -
error C2011: "xxxx"类型重定义的解决方法
在开发中经常会遇到error C2011: "xxxx"类型重定义的报错,一般有两种可能:1.检查是否有变量名相同的情况2.如果出现在.h头文件中,可能是因为多次引用该头文件出现的重定义错误,试着在出错的.h文件的第一行加下两句:#ifndef XXX_H#define XXX_H在结尾加下一句:#endif // XXX_HXXX_H一般就是该头文件的名称,不重复即可原创 2017-04-27 11:59:35 · 5959 阅读 · 0 评论 -
C++中指针*和取地址&的连用解析
一个例子说明*和&之间的连用关系:代码如下:int main(){ int a[5] = { 1, 2, 3, 4, 5 }; int *ptr = (int*)(&a + 1); int *ptr1 = (int*)(&a) + 1; cout << "*********1:" << endl; cout << "&a[0] : " << &a[0] << endl; cou原创 2017-05-06 10:11:03 · 3171 阅读 · 0 评论 -
VS2015更改项目名称步骤
在项目开发过程中,一个比较蛋疼的事就是改名,刚开始建项目的时候没想好叫什么,随便取了个名字,开发了一大部分以后突然统一规定项目名,相信这种情况大多数人都不陌生... 本文以VS2015+Qtplugin项目为例,总结一下项目改名字的步骤(假设项目初始名为wrong,要改为right) 1、以下文件需要改名(wrong->right):.sln、.vcxproj、.filters、原创 2017-06-17 15:17:45 · 15917 阅读 · 0 评论 -
error MSB6006: “cmd.exe”已退出,代码为1
“cmd.exe”已退出,代码为9009多为路径问题,解决方法可参考这里(链接)如果是“cmd.exe”已退出,代码为1,解决方法如下:点开项目目录Generated Files,可以看到moc_文件,将moc文件对应的.h头文件移除(注意是移除不是删除),再添加进来,会重新自动生成对应moc文件,如果Generated Files下没有moc文件,那么可以把.h头文件全部移除再添原创 2017-07-10 11:44:28 · 65855 阅读 · 5 评论 -
VS2015下添加Qt插件及路径配置
如何在VS2015下创建Qt5工程,必须在创建工程前将Qt5插件配置到VS2015中,本文介绍如何添加Qt5插件,以及使用插件创建Qt新项目中的路径问题。前提:1.下载安装VS2015;2.下载安装Qt5,VS2015推荐使用Qt5.8.0(下载地址:32位[Qt5.8.0]);3.下载安装连接Qt和VS的一个插件qt-vs-tools-msvc2015(下载地址:64位3原创 2017-06-22 11:48:51 · 14430 阅读 · 0 评论 -
多Qt版本冲突导致编译异常的解决方法
在VS2015+Qt5.8.0(或VS2013+Qt5.6.2等等)中新建Qt Application项目,没有任何改动,编译依然报错如下:error MSB6006: “cmd.exe”已退出,代码为 9009解决方法如下:1.检查Qt安装目录是否添加到环境变量:VS2013+Qt5.6.2配置VS2015+Qt5.8.0配置2.在确定环境变量添加了以原创 2017-06-22 13:51:34 · 16386 阅读 · 0 评论 -
C++回调函数的一点理解
回调函数是通过函数指针调用的函数:把函数的指针(地址)作为参数传递给另一个函数,当这个指针被用来调用其所指向的函数时,就称为回调函数。回调函数不是由该函数的实现方直接调用,而是在特定的事件或条件发生时由另外的一方调用的,用于对该事件或条件进行响应。 通俗点说就是:在A类中调用B类中的某个方法C,然后B类反过来调用A类中的方法D,则D就是回调函数。 打个比方:我们将A类看成一个人原创 2017-04-08 16:19:54 · 12928 阅读 · 2 评论 -
C++重载重写重定义的区别及多态的概念
1.重载和重写的区别:重载overload:在同一个类中,函数名相同,参数列表不同,编译器会根据这些函数的不同参数列表,将同名的函数名称做修饰,从而生成一些不同名称的预处理函数,未体现多态。 重写override:也叫覆盖,子类重新定义父类中有相同名称相同参数的虚函数,主要是在继承关系中出现的,被重写的函数必须是virtual的,重写函数的访问修饰符可以不同,尽管virtual是pri原创 2017-04-08 16:22:06 · 3668 阅读 · 1 评论