
c++
故里家乡
这个作者很懒,什么都没留下…
展开
-
关于qt当点击标题栏进行窗体移动和调用文件对话窗体时,对串口通信的影响
串口可以正常的发送信心但是无法接收通过串口反馈的信息解决思路通过自定义标题栏解决当窗体移动时串口无法接收到数据的情况原创 2021-05-27 16:21:54 · 769 阅读 · 8 评论 -
在重载运算符时,类的对象可以直接访问私有成员
以前对这里确实有点疑惑,但是最近在看其他书的时候突然看到这么一句话:实践证明,类(class)私有成员可以被类成员函数访问,不区分成员在哪个实例(instance)里。也就是说,在类内部的成员函数中,哪怕是传入的对象,也是可以直接访问该对象的私有成员。(前提是该对象必须是本类型的一个对象)这样类对象可以直接访问私有成员就合情合理了,而且这么做也确实是方便的。...转载 2020-10-11 20:26:49 · 1387 阅读 · 0 评论 -
关于输入流状态函数cin.eof()的问题
问题:关于输入流状态函数cin.eof()的问题int main(){char gc;while(!cin.eof()) //直至按ctrl+z键退出!{cin>>gc;cout<<gc<<endl;}cout<<cin.eof()<<endl<<cin.fail()<<endl<<cin.bad()<<endl;}《c++ primer》上说的是遇到文件结束符 cin.eof返原创 2020-10-10 22:28:38 · 1594 阅读 · 0 评论 -
c++类基础之构造函数与析构函数详解
“生而不同”之构造函数构造函数的作用在创建一个新的对象时,自动调用的函数,用来进行“初始化”工作:对这个对象内部的数据成员进行初始化。构造函数的特点1)自动调用(在创建新对象时,自动调用)2)构造函数的函数名,和类名相同3)构造函数没有返回类型4)可以有多个构造函数(即函数重载形式)构造函数的种类默认构造函数自定义的构造函数拷贝构造函数赋值构造函数默认构造函数没有参数的构造函数,称为默认构造函数。1.合成的默认构造函数构造函数的函数名,和类名必须相同但没有手动定义默认构造原创 2020-10-05 23:07:53 · 190 阅读 · 0 评论 -
堆空间分配常见的错误,以及vc内存泄露检测工具
申请的内存多次释放内存泄漏释放的内存不是申请时的地址释放空指针释放一个内存块,但继续引用其中的内容越界访问内存泄漏检测工具VisualC++ debugger 和 CRT 库第一步:包含以下头文件#define _CRTDBG_MAP_ALLOC#include <stdlib.h>#include <crtdbg.h>第二步:接管 new 操作符#ifdef _DEBUG#ifndef DBG_NEW#define DBG_NEW new ( _.原创 2020-10-04 22:49:03 · 151 阅读 · 0 评论 -
变量的 4 种存储类型
存储类型:总共有四种存储类型的变量,分别为自动变量(auto)、静态变量(static)、外部变量(extern)以及寄存器变量(register)。auto - 函数中所有的非静态局部变量。(c语言可以指定类型如auto int a,c++编译器不能指定类型编译器会进行推导)register - 一般经常被使用的的变量(如某一变量需要计算几千次)可以设 置成寄存器变量,register 变量会被存储在寄存器中,计算速度远快于存在内存 中的非 register变量.(现在已经不需要定义了,编译器会进行原创 2020-10-04 22:44:54 · 4541 阅读 · 0 评论 -
指针详解
指针实际就是保存内存地址的一个变量,指针是有类型的,当对指针进行解引时,会根据指针的类型对所指的内存进行相应的解析,同变量一样也占用一定的内存(32位系统下占4位字节,64位占8位字节)指针的定义int a;int* p = &a;*代表 p为int类型的指针,&为取地址符int* p, s1;在这行代码中p为int类型的指针,s1为整形变量指针的三种const用法const int* p;// int const* p; p = &a; //这两种定义方法原创 2020-10-04 21:53:56 · 864 阅读 · 0 评论 -
.c++内存分布详解
c++内存分区大致分为代码区,常量区,全局数据区,堆区,栈区(也可以进行进一步分区,小编感觉没必要了解太多就不做进一步扩展了)1、栈区(stack)(空间大小一般为2mb):由编译器自动分配释放,存放函数的参数值,局部变量值等。int print_int_string(int s1, std::string s2) { //s1与s2形参就是局部变量 //int a; double b; 该函数里面定义的变量也是局部变量 printf("int : %d, string : %s", s1,原创 2020-10-03 23:19:59 · 298 阅读 · 0 评论 -
断言(assert)的用法
我一直以为 assert 仅仅是个报错函数,事实上,它居然是个宏,并且作用并非"报错"。在经过对其进行一定了解之后,对其作用及用法有了一定的了解,assert() 的用法像是一种"契约式编程",在我的理解中,其表达的意思就是,程序在我的假设条件下,能够正常良好的运作,其实就相当于一个 if 语句:if(假设成立){ 程序正常运行;}else{ 报错&&终止程序!(避免由程序运行引起更大的错误) }但是这样写的话,就会有无数个 if 语句,甚至会出现,转载 2020-10-01 22:56:29 · 7066 阅读 · 0 评论 -
为什么要使用指针
1.函数的值传递,无法通过调用函数,来修改函数的实参2.被调用函数需要提供更多的"返回值"给调用函数3.减少值传递带来的额外开销,提高代码执行效率(效率提高好多倍)原创 2020-10-01 22:27:58 · 300 阅读 · 0 评论 -
gets_s
char *gets_s(char *buffer,size_t sizeInCharacters);其中第二参数就是允许的输入长度bai, 这里的size应该分配为dubuffer-1的长度,因为函数自动为’\0’分配空间的时候会溢出。和gets的区别就是gets读入不限制输入长度,所以在2011年12月,ANSI 采纳了 ISO/IEC 9899:2011 标准,标准中删除了 gets()函数,使用一个新的更安全的函数gets_s()替代,注意输入的字符串大小一定要不能大于sizeInCharact原创 2020-09-29 16:40:45 · 485 阅读 · 0 评论 -
vs2015中使用的scanf函数报错,如何正确使用新的API编写程序
vs很多带“_s”后缀的函数是为了让原版函数更安全,传入一个和参数有关的大小值,避免引用到不存在的元素,有时黑客可以利用原版的不安全性黑掉系统。比如:char d[20];写成scanf_s("%s",d,20);才是正确的,有这个参数20使准确性提高。ANSI C中没有scanf_s(),只有scanf(),scanf()在读取时不检查边界,所以可能会造成内存访问越界,例如分配了5字节的空间但是读入了10字节char buf[5]={’\0’};scanf("%s", buf);如果输入12345原创 2020-09-29 14:51:22 · 176 阅读 · 0 评论 -
c和c++字符串比较的区别
**c++**可以直接使用比较运算>, <, ==, >=, <=(这里不解释字符串的比较规则,如果需要了解请自行查找资料),字符串比较的结果为bool类型**c语言字符串比较需要使用函数int strcmp(const char str1,const char str2);str1 < str2时, 返回值<0(有些编译器返回-1有些编译器返回差值(第一个不相同的字符ASCII码的差值,str1中的字符减去str2中的字符))str1 > str2时,原创 2020-09-28 19:43:52 · 389 阅读 · 0 评论 -
c与c++遇见文件结束符的不同处理
c语音当c语言遇见文件结束符时(在windows平台ctr+z),scanf()函数返回的值为-1c++语言当c++语言遇见文件结束符时(在windows平台ctr+z),[cin>>数据类型]函数返回的值为0原创 2020-09-28 17:50:33 · 263 阅读 · 0 评论 -
c与c++如何获取字符串长度
c语言size_t strlen(const char *string);其中size_t实际上是unsigned int,在VC6.0或Dev-C++中可以看到这样的代码:typedef unsigned int size_t;头文件:string.h或cstring功能:计算给定字符串的(unsigned int型)长度,不包括’\0’在内说明:返回s的长度,不包括结束符NULL。strlen(char函数求的是字符串的实际长度,它求得方法是从开始到遇到第一个’\0’,如果你只定义没有给它赋原创 2020-09-28 17:45:28 · 1367 阅读 · 0 评论 -
c/c++常见的清空输入缓存区用法
c++ 清空缓存区经常用的函数#include std::cin.fail() : 该函数返回值bool类型,当输入的数据类型不匹配时,该函数返回值为false此时无法从输入缓存区取值.std::cin.clear() : 该函数的作用为清除错误标志,表示std::cin>>(数据类型)可以继续从输入缓存区读取数据std::sync() : 清空输入缓存c清空缓存区经常用的函数fflush() : 清空输入缓存...原创 2020-09-27 21:56:06 · 2579 阅读 · 0 评论 -
c++如何控制输出精度
cout.precision(num); 该函数用来设置精度,num为其精度的值,度默认精度带小数点前的整数部分cout.flags(cout.fixed);定点法:设置精度为其小数点后的位数cout.unsetf(cout.fixed); 取消定点法原创 2020-09-27 17:54:53 · 1366 阅读 · 0 评论 -
C++中cin.get和cin.getline以及getline的区别 以及c语音gets()详解
分为三bai种情况来看:1)输入的字符串不du超过限定大小get(str,Size):读取所有字符,遇到’\n’时止,并zhi且将’\n’留在输入缓冲区中,其将被dao下一个读取输入的操作捕获,影响该输入处理;getline(str,Size):读取所有字符,遇到’\n’时止,并且将’\n’直接从输入缓冲区中删除掉,不会影响下面的输入处理。2)输入的字符数超出限定的大小get(str,Size):读取Size-1个字符,并将str[Size-1]置为’\0’,然后将剩余字符(包括’\n’)留在输入原创 2020-09-27 17:31:39 · 748 阅读 · 0 评论 -
c++的左值与右值概念详解
了解计算机存储结构cpu: 是大脑执行二进制指令 cpu中含有寄存器,该寄存器没有地址,用于临时保存计算的数据,一般情况下32位有8个寄存器,64位有16个寄存器,寄存器的特点访问速度非常快,容量非常小PAM :访问速度快,容量一般,一但掉电数据就没了磁盘 :访问速度慢容量巨大,永久性保存数据,同时是访I/O的短板左值和右值的概念按字面意思,通俗地说。以赋值符号 = 为界,= 左边的就是左值(lvalue),= 右边就是右值(rvalue)。int a = 666;左值原创 2020-06-10 18:45:58 · 363 阅读 · 0 评论 -
c++智能指针(观看者需要有c++面向对象的基础,对指针有一定的了解)
1.为什么要使用智能指针先看下面一个例子#include <iostream>#include <string>#include <exception>using namespace std;void memory_leak_demo1() { string* str = new string("今天又敲了一天代码,太累了,回家休息了!!!"); cout << *str << endl; return原创 2020-06-10 17:37:28 · 166 阅读 · 0 评论