C++
文章平均质量分 91
CPP
GK小卜
这个作者很懒,什么都没留下…
展开
-
回调函数与钩子函数的区别,另QT中connect函数的实现,lambda的使用
这两种函数的区别,简单说,其实就是钩子函数不一定会用到,而回调函数一定会用到,因为钩子函数是要等待某种状态发生才会用到,这种状态不一定会发生,而回调函数是为了某个目的设置的,只要这个目的是必须的就一定会调用到。2、lambda表达式[]的捕获赋值,可以节省临时变量的赋值,原理就是lambda创建了一个类,[ ]里的捕获赋值只会初始化一次,详见上述参考链接。信号的参数数量必须大于等于槽函数的参数数量,信号的参数和槽函数的参数必须得兼容(类型一致或可以转化),信号槽的返回值的类型也必须得兼容。原创 2023-06-02 23:33:33 · 621 阅读 · 0 评论 -
用cout和cin编写一个输入输出查询信息函数
用cout和cin编写一个输入输出查询信息函数##include using namespace std;int main(){int Xuhao=0;while(Xuhao!=10){cout<<“1.QT是什么?”<<endl;cout<<“2.在哪下载QT?”<<endl;cout<<“3.学习QT需要哪些技能?”<<endl;cout<<“4.如何制作QT程序?”<<endl;co原创 2020-08-08 00:06:50 · 206 阅读 · 0 评论 -
C++中涉及到类继承,构造函数和析构函数执行的顺序,以及虚函数在其中的作用
一.构造函数与析构函数在对象创建与删除时的执行顺序构造函数:按照继承顺序依次执行父类的构造函数,再执行子类的构造函数,析构函数:和构造函数完全相反;这里面有个逻辑是,对象创建时,子类会自动先调用父类的构造函数,析构时,子类自己的析构函数执行完会自动调用父类的析构函数;但是反过来就不会了。所以就会用到虚析构函数;二.虚析构函数在实际调用对象时,我们经常会用父类的指针去操作子类的函数功能,这个时候delete父类的指针后,只会执行父类的析构函数,而子类里的析构函数不会执行所以会造成内存泄露。当我们把原创 2020-11-17 22:40:24 · 911 阅读 · 0 评论 -
C++单例模式实际应用于意义
一.为什么需要单例模式?这一次我们要向大家介绍一种新的设计模式——单例模式(singleton pattern)。所谓“单例模式”,指的就是一个类只能有一个或者几个实例化的对象——比如说,在 Windows 或者 macOS 这样的桌面操作系统里,鼠标指针箭头有且只有一个,不能出现第二个。更多内容,大家可以用自己常用的搜索引擎搜索关键字“单例模式”或者“singleton pattern”。为了实现这个目的:1.为了保证只有一个实例对象,不能通过直接实例化来构造函数,那么构造函数和非缺省构造函数就不能原创 2020-11-14 16:29:01 · 966 阅读 · 0 评论 -
C++运算符重载相关问题
涉及到运算重载,那么首先我们得明白有哪些运算符?1.单目运算符:++,- -2.双目运算符:+,-,*,/,3.三目运算符:?:不过它不能重载这些运算符都可以对基本类型做运算,像整型,字符型以及浮点型,那是因为这些基本类型已经对这些运算符定义好了运算。而如果我们需要对我们自己定义的类对象进行运算符运算的话,就需要重载运算符,比如下面:class A{ int x; int y; A(int thex,int they) :x(thex),y(they) {} }int ma原创 2020-11-10 23:30:05 · 532 阅读 · 0 评论 -
C++中return返回时有没有创建临时对象调用构造函数问题
1.如果返回值被用在赋给其它对象或作为其它函数的参数时,函数内部在已经创建有对象情况下,返回时时不在创建零时对象的,如果函数内的对象没有创建,只在返回时出现过,那么会在返回时创建,这个就是因为必须得有实例对象才能传值。#include<iostream>#include<string>using namespace std;string GetMyString(){ return "This is a string";}class zheng{ p原创 2020-11-03 22:09:05 · 929 阅读 · 0 评论 -
用C++编写构造一个简单的内存池
(Memory Pool)是一种内存分配方式,又被称为固定大小区块规划(fixed-size-blocks allocation)。通常我们习惯直接使用new、malloc等API申请分配内存,这样做的缺点在于:由于所申请内存块的大小不定,当频繁使用时会造成大量的内存碎片并进而降低性能。内存池则是在真正使用内存之前,先申请分配一定数量的、大小相等(一般情况下)的内存块留作备用。当有新的内存需求时,就从内存池中分出一部分内存块,若内存块不够再继续申请新的内存。这样做的一个显著优点是,使得内存分配效率得到提升原创 2020-11-03 15:58:18 · 364 阅读 · 0 评论 -
C++用dynamic_cast与visitor模式返回类的名称
一.用dynamic_cast的方式返回类的名称#include <iostream>#include <string>#include <vector>#include <memory>using namespace std;class Cat;class Dog;class Mouse;class IVisitor //这里是可以将这个类直接放在Animal类外面的,放在里面主要是让代码更紧凑。{public: virt原创 2020-11-01 14:30:11 · 161 阅读 · 0 评论 -
C++析构函数和构造函数执行的顺序时机
当一个类中嵌入的有另一个类时,如果没有对内嵌对象初始化,则先对内嵌的默认构造,再执行外层类的构造,析构时先析构外层类,再析构内层类。原创 2020-10-31 14:30:45 · 453 阅读 · 1 评论 -
C++中lambda表达式既不能使用值、也不能使用引用来捕获自己
std::function<int(int)> f = [&f](int x) { return x == 0 ? 0 : f(x - 1);};这个的原因应该是用[]捕获变量的方式是引用,没有存储的空间,所以会出错,如果换成赋值捕获会有空间分配就没问题了。...原创 2020-10-29 17:24:30 · 427 阅读 · 0 评论 -
C++中lambda表达式与function模板类容器的使用
一.lambda表达式形式:[capture](parameters)->return-type {body}[]叫做捕获说明符,表示一个lambda表达式的开始。接下来是参数列表,即这个匿名的lambda函数的参数,->return-type表示返回类型,如果没有返回类型,则可以省略这部分。变量捕获与lambda闭包实现string name;cin >> name;[&](){cout << name;}();lambda函数能够捕获lam原创 2020-10-29 17:05:33 · 1569 阅读 · 1 评论 -
C++中什么时候用move,什么时候用forward?
两者主要的区别:move的真实含义一.move()二.forworad<>()原创 2020-10-26 23:52:16 · 1134 阅读 · 0 评论 -
C++中的左值、右值和左值引用、右值引用相关问题
一.什么是左值、右值?C++( 包括 C) 中所有的表达式和变量要么是左值,要么是右值。通俗的左值的定义就是非临时对象,那些可以在多条语句中使用的对象。所有的变量都满足这个定义,在多条代码中都可以使用,都是左值。右值是指临时的对象,它们只在当前的语句中有效。举几个列子就更好判断了:int i = 0;i为左值,0为右值;((i>0) ? i : j) = 1;i、j为左值,0、1为右值;可见左右值并不是以在赋值=号左右边来区分的,主要看是非零时对象还是零时对象。还有一些特殊的右值出现原创 2020-10-25 23:04:19 · 325 阅读 · 0 评论 -
用C++实现简单的字符串值类型对象
问题:值类型在c++中是一个很重要的概念,指的是一个类的实例像int类型一样,可以被复制、构造、传递,而且不需要用户去担心(至少在表面上)new和delete的问题。那么构造一个完整的值类型需要注意哪些方面呢?...原创 2020-10-23 23:23:45 · 214 阅读 · 0 评论 -
C++(11后才有的特性)中通用初始化语法(universal initialization)的使用用法
1.返回值中的使用直接在类型的后面接上一对大括号,大括号里面写每个构造函数参数的值,或者没有构造函数的情况下写每个成员变量的值,然后这一个整体就构成一个表达式,返回一个这个类型的实例.Vector operator+(Vector a,Vector b){ return Vector{a.x+b.x,a.y+b.y};}如果上述不用{}通用初始化语法,则需要在函数中实例化一个对象,最后return这个对象。如下: 显然这种方法较为麻烦。Vector operator+(Vecto原创 2020-10-22 19:29:17 · 470 阅读 · 0 评论 -
C++中保留小数点后 2 位数字(四舍五入)打印输出
#include <iostream>#include <iomanip>#include <cmath>using std::cin;using std::cout;using std::endl;using std::setprecision;using std::fixed;int main() { float a; float b; cin >> a >> b; //原创 2020-10-12 20:49:10 · 2907 阅读 · 0 评论 -
用C++编程求两个数字的最大公因数和最小公倍数
一.最大公因数和最小公倍数的数学公式算法如下:最大公因数:辗转相除法(详情请百度)就是形如两个整数n,m并且n>m;则可以通过n/m得到一个余数是否为零判断m是否为n和m的最大公因数,如果不相等,则将m作为被除数,余数作为除数在进行上述操作,直到余数等于零,则那个除数就为两个整数的最大公因数。这里有重复的操作,不断的相除:除数变为下一个的被除数,余数变为下一个的除数(迭代的表达关系式)迭代停止条件:这一个迭代函数里的除数也就是上一个里的余数为0;通过以上就可以写出一个迭代函数;最.原创 2020-10-16 19:56:08 · 3676 阅读 · 0 评论 -
用C++编写一个RTS游戏《星际争霸II——自由之翼》——编写一个程序,展现双方基地在给定的水晶(Minerals)下,按顺序训练新的单位的过程。
具体规则如下:双方能生产的兵种都有三种:农民(即建造机器人SCV),枪兵(陆战队员Marine)和护士(医疗兵Medic),消耗的水晶数分别是10,5,4每经过一个时间单位,双方的基地各有一个新的单位被训练出来Raynor 的建造序列是 SCV,Marine,Medic,Mengsk 的建造序列是 Marine,Medic,SCV,在资源耗尽之前双方将一直循环建造如果当前剩余资源无法建造当前要建造的单位,则自动顺延至下一个单位——如果所有单位都无法建造的话,则建造停止。输入一个数字为双方分别拥有的原创 2020-10-15 23:47:46 · 959 阅读 · 1 评论 -
C++中public,protected,private的访问权限如何判断问题,以及类的public,protected,private继承有什么作用?
这几个权限标识符,很多人都会搞混,其实只要理解了它的意思就很简单。要理解这几个标识符,你得搞明白访问权限是相对哪些对象的权限,就像银行的保险库,普通人肯定是没有权限的,但是银行经理就是可以进出的。那这里的权限就是相对于普通人和银行内部的人来说的。同理在类中,这个权限就是对类外,类内部,子类来说的。判断访问权限准则:首先类自己的成员是都可以访问的1.public让外部的可以访问,其它都可以访问2.protected让外部不能访问,让类的子类可以访问3.private让外部和类的子类都不能访原创 2020-11-07 16:34:33 · 458 阅读 · 0 评论