c++
C++
gigi怪
这个作者很懒,什么都没留下…
展开
-
Qt:关于QAxWidget的使用注意
1.QtDesigner中,提供了接口,可自定义插件,需继承这个抽象类QDesignerCustomWidgetInterface,实现相应的接口。{public: virtual ~QDesignerCustomWidgetInterface() {} virtual QString name() const = 0; //名字virtual QString group() const = 0; //即在哪个组显示virtual QString toolTip() const原创 2021-07-17 22:28:36 · 3720 阅读 · 1 评论 -
C++:关于匿名函数
1.匿名函数的作用相较于普通非匿名函数,匿名函数无需进行另外的声明和定义,仅当调用该匿名时,函数体才会创建,且调用完毕后会立即释放资源。因此匿名函数会更加节省空间,常用于像std::sort这样可以重写排序方式的函数。2.匿名函数的例子 //例子1: auto testReturn = [](int a1, int a2) {return a1>a2 }; bool flag = testReturn(23, 21); cout<<flag<<endl; //例原创 2021-07-14 08:28:02 · 1024 阅读 · 0 评论 -
error: ‘>>‘ should be ‘> >‘ within a nested template argument list
在镶嵌模板中,后一个>需要一个空格隔开vector<vector<Pair>> coutours;//修改成如下即可vector<vector<Pair> > coutours;原创 2021-03-12 15:08:53 · 326 阅读 · 0 评论 -
(关键字)static整理
一.用法1.声明全局变量。2.声明局部变量。3.声明函数。4.声明类成员变量。5.声明类成员函数二.分析1.用static声明全局变量表示该变量只对于当前文件可见,工程中的其他文件无法对其访问。2.用static声明局部变量。#include <stdio.h>void func1(void){ static int a = 10; ...原创 2020-05-02 15:15:28 · 104 阅读 · 0 评论 -
(c++关键字)explicit整理
1.explicit作用使用explicit声明构造函数用于防止单参数的构造函数的隐式转化。2.关于上述隐式转换在C++中, 当构造函数只有一个参数时, 在编译的时候就会有一个缺省的转换操作。即将该构造函数对应数据类型的数据转换为该类对象。test1 a = 10;//test1为单参数构造函数//隐式转换,等同以下操作test1 a(10);//或者test1 temp(10);...原创 2020-05-06 17:16:43 · 131 阅读 · 0 评论 -
实用数据类型转换
(具体的编码原理暂不考虑)1.汉字或字母数字(数组)转QStringchar buf[128] = {0};strcpy(buf, u8"测试");//需要u8,保证字符串不会乱码QString qstr = QString::fromUtf8(buf);char buf[128] = {0}; strcpy(buf, "abc123");QString qstr = QString::fromUtf8(buf);QString用相应的to来转化为其他类型。2.string,QSt原创 2021-01-12 15:32:52 · 191 阅读 · 0 评论 -
两time_t相减求时间差
EndDate,StartDate为time_t类型,假设已完成初始化。double dTime = difftime(EndDate,StartDate);//两time_t相减std::string strTime = double2TimeString(dTime);time_t实际上也是整形,相关编码原理参照其他文档。std::string double2TimeString(double dTime){ //dTime为秒数 int iHour = dTime / 60 / 60;原创 2021-01-12 15:22:07 · 2900 阅读 · 1 评论 -
C++关于二维数组传递
解决1.如下需要向函数传递一个二维数组。int func(int a, int b,int array[10][10]) //array[][10]也可以{//...}int array[10][10];func(1,1,array);2.但需要知道数组确定大小,看着实在别扭,可以利用c++模板template<std::size_t Num>int func(int a,int b,int array[][Num]){//...}int array[1..原创 2020-08-13 11:38:53 · 626 阅读 · 0 评论 -
C:关于int argc与char **argv
从学C那一天开始,关于main函数中的参数argc和argv就一直困扰我,一个整型和一个char型二级指针到底充当着什么样的作用。在一些操作系统中,包括UNIX和MS-DOS,其让用户在命令行中编写参数来启动一个程序的执行。诸如上图,我们在平时在使用很多shell命令的时候,都会带有一些后缀,便是通过这两个参数传递给相应的程序。#include <stdio.h>#include <stdlib.h>int main(int argc,char **argv){原创 2020-07-28 22:06:19 · 196 阅读 · 0 评论 -
C++:继承派生那些事
1.派生类对象中构造函数,析构函数调用顺序。2.为什么基类析构函数要是虚函数。3.各种继承方式下的派生类对象结构原创 2020-07-28 10:46:48 · 171 阅读 · 0 评论 -
关于虚函数的两个问题
1.为什么构造函数不能设为虚函数?虚函数的作用在于用基类指针操作派生类对象构造函数不是虚函数的原因,第一没有这个必要,没有意义;构造函数需要明确构造的对象的类型,虽说虚函数表和虚指针空间上可以独立于类对象。c++之父(大致意思):虚函数调用是在部分信息下完成工作的机制,允许我们只知道接口而不知道对象的确切类型。 要创建一个对象,你需要知道对象的完整信息。 特别是,你需要知道你想要创建的确切类型。 因此,构造函数不应该被定义为虚函数。2.为什么析构函数应该是虚函数至于虚函数为什么应该是虚函数一个例原创 2020-07-17 11:05:46 · 107 阅读 · 0 评论 -
关于c++泛型算法
一.概述c++泛型算法,大部分定义于头文件algorithm,numeric中。泛型算法不依赖于特定容器类型和容器所保存元素的类型,通常传入参数包含一对迭代器,算法一般不会改变底层容器的大小,也不会执行容器的操作。下面简单介绍一些常用的泛型算法。二.一些算法1.accumulate传入一对迭代器和一个数值,在该数值基础上把迭代器范围内的元素累加。int sum = accumulate(vec.cbegin(),vec.cend(),10);string sum1 = accumlate(v原创 2020-06-26 11:57:42 · 130 阅读 · 0 评论 -
关于智能指针的理解
c++智能指针,即句柄类,用于管理动态内存,自动去回收空间,因为在使用new时,难免会出现以下几种状况:1.忘记delete内存,这种情况就是我们常说的“内存泄漏”。2.使用已经释放的对象,这要求我们要清楚变量的内存情况。3.同一会内存释放两次。智能指针有四种,均包含在头文件中,auto_ptr已被c++11抛弃,下面只讨论shared_ptr,unique_ptr和weak_ptr。1.shared_ptr(1)定义一个shared_ptr,并初始化智能指针是模板类,因此需要指定其管理的对象原创 2020-06-14 16:13:30 · 236 阅读 · 0 评论