![](https://img-blog.csdnimg.cn/20191108203948611.png?x-oss-process=image/resize,m_fixed,h_224,w_224)
C&C++
文章平均质量分 62
ADHERENTS
学渣一枚
展开
-
赋值兼容规则
赋值兼容规则是指在需要基类对象的任何地方都可以使用公有派生类的对象来替代。通过公有继承,派生类得到了基类中除构造函数、析构函数之外的所有成员,而且所有成员的访问控制属性也和基类完全相同。这样,公有派生类实际就具备了基类的所有功能,凡是基类能解决的问题,公有派生类都可以解决。赋值兼容规则中所指的替代包括以下的情况:派生类的对象可以赋值给基类对象。 派生类的对象可以初始化基类的引用。 派生类对象的地址可以赋给指向基类的指针。在替代之后,派生类对象就可以作为基类的对象使用,但只能使用从基类继承的...转载 2021-04-07 09:27:54 · 2203 阅读 · 0 评论 -
自由存储区与堆
在C++中,内存区分为5个区,分别是堆、栈、自由存储区、全局/静态存储区、常量存储区。自由存储区与堆的区别在于malloc在堆上分配的内存块,使用free释放内存,而new所申请的内存则是在自由存储区上,使用delete来释放。自由存储区与堆是否是两块不同的内存区域?划分自由存储区与堆的分界线就是new/delete与malloc/free。然而,尽管C++标准没有要求,但很多编译器的new/delete都是以malloc/free为基础来实现的。那么借以malloc实现的new,所申请的内转载 2021-04-06 16:10:34 · 5880 阅读 · 2 评论 -
什么条件下使用多态
将一个类作为非多态类型:一个函数的执行方式十分确定,不需要任何特殊处理,不希望在派生类提供特殊的实现,就应将它声明为非虚函数 该类中的所有函数都具备以上特点将一个类设计为非多态类型,意味着不希望其他类对他进行共有继承如果需要其他类对一个类进行共有继承,则应当将其设计为多态类型...原创 2021-02-03 13:12:30 · 499 阅读 · 0 评论 -
指针,数组指针、指针数组
什么是指针,数组指针、指针数组const int a;int const a;const int *a;int * const a;const int * const a;int const * const a;前两个的作用是一样,a是一个常整型数; 第三个意味着a是一个指向常整型数的指针(也就是,整型数是不可修改的,但指针可以); 第四个意思a是一个指向整型 数的常指针(也就是说,指针指向的整型数是可以修改的,但指针是不可修改的); 最后两个意味着a是一个指向常整型数的常指针(也原创 2020-05-26 18:26:07 · 326 阅读 · 0 评论 -
函数命名的一些规范
驼峰命名法骆驼式命名法(Camel-Case)又称驼峰式命名法,也称小驼峰式命名法。骆驼式命名法就是当变量名或函数名是由一个或多个单词连结在一起,第一个单词以小写字母开始,从第二个单词开始以后的每个单词的首字母都采用大写字母,例如:myFirstName、myLastName,这样的变量名看上去就像骆驼峰一样此起彼伏,故得名。匈牙利命名法据说是一位叫 Charles Simonyi 的匈牙利程序员发明的,后来他在微软待了几年,于是这种命名法就通过微软的各种产品和文档资料向世界传播开了。.转载 2020-09-17 17:51:48 · 1854 阅读 · 0 评论 -
strcpy_s函数/strcpy函数简介
strcpy/**描述:此类函数是用于对字符串进行复制(拷贝)。**参数: * [in] strSource:需要拷贝的字符串* [out] strDestination:拷贝完成之后的字符串* *返回值:指向 strDestination 这个字符串的指针*/char* strcpy(char* strDestination, const char* strSource);strcpy_s/**描述:此类函数是用于对字符串进行复制(拷贝)。**参数:转载 2020-08-21 14:59:33 · 5250 阅读 · 0 评论 -
MFC CString类型字符串转 char
1、通过CString的成员函数—GetAt() 依次获取单个字符字符串数组 memset() GetAt() void Ascii2Char(){ UpdateData(TRUE); char strbuf[1024]; memset(strbuf, '\0', sizeof(strbuf)); // attention // 通过CString的成员函数依次获取单个字符 for (size_t i = 0; i < m_InputValue.GetLength(); i.原创 2020-08-21 21:11:46 · 1075 阅读 · 0 评论 -
数组有结束标识符吗?
数组在声明或初始化时已经给出了大小,所以不需要结束标识符 字符数组并不要求它的最后一个字符为 '\0' 对于字符串数组,其数组长度(sizeof()可得)往往大于其实际长度,为了检测字符串的实际操作和打印,往往在字符串数组最后人为地加上一个 '\0'...原创 2020-08-19 20:29:39 · 5046 阅读 · 1 评论 -
C++ 乱码
BYTE var[4] = {'a','b','c'};//TRACE("var= %s",var);m_OutputValue = (CString)var;MessageBox(m_OutputValue);var[4]可以正常显示,var[3]出现乱码原创 2020-08-19 08:43:21 · 584 阅读 · 0 评论 -
将CString字符串转换为char[]或char*
// 将CString字符串转换为char[]或char*char* chs = m_InputValue.GetBuffer(); //from CString to char*//int Len = strlen(chs) / sizeof(char);strcpy_s(buf, chs);m_OutputValue += buf;原创 2020-08-18 13:49:45 · 265 阅读 · 0 评论 -
char ** 与char * a[ ]
char *a [ ]由于[ ] 的优先级高于* 所以a先和 [ ] 结合,他还是一个数组,数组中的元素才是char * ,前面讲到char * 是一个变量,保存的地址。如 char *a[ ] = {"China","French","America","German"};数组中的元素是字符串sizeof(a) = 16,字符串常量的本质是地址,a 数组中的元素为char * 指针,指针变量占四个字节,那么四个元素就是16个字节#include <stdio.h>int ma..原创 2020-08-19 08:40:11 · 294 阅读 · 0 评论 -
c 和c++ 中的struct有什么不同
c和c++ 中struct的主要区别是c中的struct不可以含有成员函数,而c++ 中的struct可以 c++ 中struct和class的主要区别在于默认的存取权限不同,struct默认为public ,而class默认为private原创 2020-08-14 08:43:49 · 751 阅读 · 0 评论 -
sizeof 和 strlen 的区别
对于指针,sizeof 操作符返回这个指针占的空间,一般是4个字节; 对于一个数组,sizeof 返回这个数组所有元素占的总空间。 而strlen不区分是数组还是指针,就读到 \0 为止返回长度,并且strlen是不把\0计入字符串的长度的。sizeof:sizeof 是运算符,在头文件中 typedef 为 unsigned int,其值在编译时即计算好了,参数可以是数组、指针、类型、对象、函数等。它的功能是:获得保证能容纳实现所建立的最大对象的字节大小。strlen:strlen 是函数,..原创 2020-08-14 08:42:28 · 79 阅读 · 0 评论 -
.cc文件和.hpp文件
.cc 文件Linux / Unix下为 C++ 源文件的默认的扩展名,与windos下的.cpp是一个意思。.hpp文件.hpp文件,其实质是将.cpp的实现代码混入.h头文件当中,定义与实现都包含在同一文件,则该类的调用者只需要include该hpp文件即可,无需再将cpp加入到project中进行编译。未完待续..........原创 2019-10-27 20:55:07 · 1964 阅读 · 0 评论 -
加载静态链接库lib
需要引入两个文件,如下所示#include "FRI_Reader.h" #pragma comment(lib,"FRI_Reader.lib")原创 2020-08-17 08:58:47 · 94 阅读 · 0 评论 -
&a+1 与 &a[0]+1
对于数组a,数组首地址是&a,数组首元素地址是&a[0],这两者数值上相等,但是在进行地址加减时,表示的意义不同:数组名可以认为是一个指针,它指向数组的第 0 个元素。在C语言中,我们将第 0 个元素的地址称为数组的首地址。数组名的本意表示整个数组,也就是表示多份数据的集合,但在使用过程中经常会转换为指向数组第 0 个元素的指针,所以上面使用了“认为”一词,表示数组名和数组首地址并不总是等价。 &a+1,其中"1"的大小指的是整个数组的所占大小,例如数组a[4],&a原创 2020-08-12 21:20:15 · 2897 阅读 · 3 评论 -
C 库函数 - strcpy()
描述C 库函数char *strcpy(char *dest, const char *src)把src所指向的字符串复制到dest。需要注意的是如果目标数组 dest 不够大,而源字符串的长度又太长,可能会造成缓冲溢出的情况。声明下面是 strcpy() 函数的声明。char *strcpy(char *dest, const char *src)参数dest-- 指向用于存储复制内容的目标数组。 src-- 要复制的字符串。返回值该函数返回一个指向最终...转载 2020-08-04 08:33:34 · 134 阅读 · 0 评论 -
size _t 类型介绍
size _t为了增强程序的可移植性,便有了size_t,不同系统上,定义size_t可能不一样。经测试发现,在32位系统中size_t是4字节的,在64位系统中,size_t是8字节的,这样利用该类型可以增加程序移植性。...原创 2020-08-12 20:04:39 · 313 阅读 · 0 评论 -
C 库函数 - strcat()
描述C 库函数char *strcat(char *dest, const char *src)把src所指向的字符串追加到dest所指向的字符串的结尾。声明下面是 strcat() 函数的声明。char *strcat(char *dest, const char *src)参数dest-- 指向目标数组,该数组包含了一个 C 字符串,且足够容纳追加后的字符串。 src-- 指向要追加的字符串,该字符串不会覆盖目标字符串。返回值该函数返回一个指向最终的目标...转载 2020-08-01 16:55:53 · 117 阅读 · 0 评论 -
c++中的c_str()用法
语法: const char *c_str()c_str()函数返回一个指向正规C字符串的指针,内容与本string串相同。 这是为了与c语言兼容,在c语言中没有string类型,故必须通过string类对象的成员函数c_str()把string 对象转换成c中的字符串样式。 注意:一定要使用strcpy()函数 等来操作方法c_str()返回的指针 char* c; string s = "1234"; c = s.c_str(); 最好不要这样,c最后指向的内容是垃圾,因...转载 2020-08-01 16:53:11 · 131 阅读 · 0 评论 -
数据类型转换为字符串
C语言提供了几个标准库函数,可以将任意类型(整型、长整型、浮点型等)的数字转换为字符串。itoa():将整型值转换为字符串。 ltoa():将长整型值转换为字符串。 ultoa():将无符号长整型值转换为字符串。 gcvt():将浮点型数转换为字符串,取四舍五入。 ecvt():将双精度浮点型值转换为字符串,转换结果中不包含十进制小数点。 fcvt():指定位数为转换精度,其余同ecvt()。C/C++语言提供了几个标准库函数,可以将字符串转换为任意类型(整型、长整型、浮点型等)。..原创 2020-08-01 16:43:37 · 2549 阅读 · 0 评论 -
char、char * 、char[] 、string 、CString简介及相互转换(一)
charchar表示字符类型,一个char变量只能存储一个字符char *char * 是一个指向字符的指针,可以指向一个字符,也可以表示字符数组的首地址(首字符的地址)。一般使用的它的第二的功能来表示一个字符串,功能与字符串数组char ch[n] 一样。char []:字符串数组char 和 char[] 相同点:char*和char[]这两种类型都可以对应一个字符串char * a = "hello1"; char b[] = "hello2";// 其中a是一个指.原创 2020-08-01 15:41:39 · 432 阅读 · 0 评论 -
stringstream :定义函数模板来将一个任意的类型转换到特定的目标类型
例如:将各种数字值,如int、long、double等等转换成字符串,要使用以一个string类型和一个任意值T为参数的to_string()函数。to_string()函数将T转换为字符串并写入result中。使用str()成员函数来获取流内部缓冲的一份拷贝: template<class T> void to_string(string & result, const T &var) { ostringstream oss;//创建一个流 ..转载 2020-08-01 14:28:03 · 215 阅读 · 0 评论 -
函数:sprintf()
sprintf()函数用于将格式化的数据写入字符串,其原型为: int sprintf(char *str, char * format [, argument, ...]); 参数:str为要写入的字符串 format为格式化字符串,与printf()函数相同 argument为变量sprintf 最常见的应用是把整数打印到字符串中,所以spritnf 在大多数场合可以替代itoa。将一个整数变为16 进制字符串,格式为左边补0 等宽,需在表示宽 度的数字前面加个0 s...原创 2020-08-01 16:56:32 · 101 阅读 · 0 评论 -
C++ 程序一般组织结构
C++ 程序主要包括类的声明 类的定义 类成员函数的实现 主函数通常一个项目至少分三类文件类定义的文件(*.h) 类实现的文件(*.cpp) 类的使用文件(*.cpp)——主函数文件未完待续...原创 2020-07-31 17:58:23 · 389 阅读 · 0 评论 -
位运算
未完待续原创 2020-07-30 20:46:58 · 90 阅读 · 0 评论 -
虚函数
只有通过基类的指针或者引用调用虚函数时,才会发生动态绑定。void fun(Base* ptr){ prt->display();}如果将fun函数中的参数类型设定为Base而非Base*,则无法实现。这是因为,基类的指针可以指向派生类的对象,基类的引用可以作为派生类对象的别名,但基类的对象无法作为派生类的对象。Derived d; //定义派生类对象Base* ptr = &d; //基类的指针ptr可以指向派生类的对象Base &ref = d; /原创 2020-07-29 16:37:10 · 97 阅读 · 0 评论 -
char、char * 、char[] 、string 、CString简介及相互转换(二)
char *char * 是一个指向字符的指针,可以指向一个字符,也可以表示字符数组的首地址(首字符的地址)。一般使用的它的第二的功能,来表示一个字符串,功能与字符串数组char ch[n] 一样。表示字符串时,最后有一个 '\0' 结束符作为字符串的结束标志。stringstring是C++标准库(STL)中的类型,它是定义的一个类,定义在<string>头文件中。里面包含了对字符串的各种常用操作,与char * 相比,其优势在于内容可以动态拓展、字符串操作的方便快捷,用 + 号进原创 2020-08-01 15:58:00 · 293 阅读 · 0 评论 -
C++ 将字符转换为相应的十六进制值的函数
char CSCommTestDlg::ConvertHexChar(char ch){ //这是一个将字符转换为相应的十六进制值的函数 //功能:若是在0-F之间的字符,则转换为相应的十六进制字符,否则返回-1 if((ch>='0')&&(ch<='9')) return ch-0x30; else if((ch>='A')&&(ch<='F')) return ch-'A'+10; else if((ch>='a.原创 2020-07-15 08:25:19 · 1569 阅读 · 0 评论 -
常量指针和指针常量
常量指针:本质是一个指针 该指针指向的内容为常量,故常量指针指向地址中的常量不能修改 但指针本身可以改变指针常量:本质是一个常量,常量的类型为指针类型 在初始化之后就不能改变,又称常指针,即不能指向除此地址之外的任何其他东西...原创 2020-06-23 21:18:31 · 104 阅读 · 0 评论 -
函数指针和指针函数的区别
指向函数代码首地址的指针变量称为函数指针函数指针定义:函数类型(*指针变量名)(形参列表)函数类型——表明函数的返回类型,由于"()"的优先级高于"*",所以指针变量名外的括号必不可少;形参列表——表示指针变量指向的函数所带的参数列表;例如:int (*f)(int x);在定义函数指针时请注意:函数指针和它指向的函数的参数个数和类型都应该是—致的;int func(int x); /* 声明一个函数 */int (*f) (int x); /* 声明一个函数指针 */f转载 2020-06-23 20:54:45 · 759 阅读 · 0 评论 -
C++ 基础
1、C++释放内存的运算符delete,对应与运算符new;free为函数对应于malloc2、C和C++编译器是集成的,编译一般分为四个步骤:预处理、编译、汇编、链接3、C++ 拷贝构造函数和赋值函数的区别拷贝构造函数是一个对象初始化一块内存区域,这块内存就是新对象的内存去,而赋值函数是对于一个已经被初始化的对象进行赋值操作。 在数据成员包含指针对象的时候,一种是复制指针对象,另一种是引用指针对象。拷贝构造函数大多数是复制,赋值函数是引用对象。 实现不一样。拷贝–是构造函数,通过参数对象,原创 2020-05-26 18:59:52 · 80 阅读 · 0 评论 -
关键字static、const、volatile的作用
1、static关键字的作用在C语言中,static有下3个作用:在函数体中,一个被声明为静态的变量在这一函数被调用过程中只会被分配一次内存,且整个运行期间不会重新分配; 在函数体外、某个源文件内,一个被声明为静态的变量只可被该源文件内的所有函数访问,但不能被其他源文件的函数访问。它是一个本地的全局变量; 在某个源文件内,一个被声明为静态的函数仅仅只可以被这个源文件的其它函数调用。也就是说,这个函数被限制在声明它的源文件的本地范围之内使用。2、volatile关键字的作用volatile原创 2020-05-26 18:28:44 · 2588 阅读 · 0 评论 -
引用
引用就是某一变量(目标)的一个别名,对引用的操作与对变量直接操作完全一样。引用的声明方法:类型标识符 &引用名 = 目标变量名;例如:int a; int &ra = a; // 定义引用 ra,它是变量 a 的引用,即别名 &在此不是求地址运算,而是起标识作用。 类型标识符是指目标变量的类型。 声明引用时,必须同时对其进行初始化。 引用声明完毕后,相当于目标变量名有两个名称,即该目标原名称和引用名,且不能再把该引用名作为其他变量名的别名。 ra =1; 等价于 a..原创 2020-05-26 18:21:45 · 241 阅读 · 0 评论 -
抽象、重载、多态(虚函数)
1、多态:向不同的对象发送同一个消息,不同的对象会产生不同的行为2、函数重载:对同一函数名定义多个函数。函数的重载属于静态多态性,要求在程序编译时就只知道调用函数的全部信息 函数名相同,但是参数的个数或者类型不同3、虚函数:C++中的虚函数的作用主要是实现了多态的机制。关于多态,简而言之就是用父类型别的指针指向其子类的实例,然后通过父类的指针调用实际子类的成员函数虚函数属于动态多态...原创 2019-11-10 19:30:14 · 164 阅读 · 0 评论 -
栈区、堆区、全局区
链接:https://www.nowcoder.com/questionTerminal/baa345448efd47debc5b53504f83d809?orderByHotValue=1&pos=91来源:牛客网栈区:由编译器自动分配和释放的内存区域,用于存放函数的参数值,局部变量的值等。随着函数的调用和返回,栈区的数据将动态变化。堆区:程序员向系统申请或释放(new、m...原创 2019-11-10 19:29:45 · 130 阅读 · 0 评论 -
刷题(一)
1、arp协议的主要作用是什么?ARP协议是地址解析协议。在局域网中,网络中实际传输的是“帧”,帧里面是ARP协议主要负责将局域网中的32位IP地址转换为对应的48位物理地址,即网卡的2、c和c++ 中的struct有什么不同?c和c++ 中struct的主要区别是c中的struct不可以含有成员函数,而c++ 中的struct可以 c++ 中struct和class的主要区别在于默认...原创 2019-11-10 19:27:54 · 244 阅读 · 0 评论 -
刷题(三)
1、SPI为几线制,分别是什么,最高波特率是多少2、CAN和CANopen的区别是什么,CANopen的最高波特率是多少,如何设置3、C++友元函数的作用友元提供了不同类的成员函数之间、类的成员函数与一般函数之间进行数据共享的机制。通过友元,一个不同函数或另一个类中的成员函数可以访问类中的私有成员和保护成员。4、内联函数的作用因为函数调用时候需要创建时间、参数传入传递等操...原创 2019-11-10 19:27:34 · 147 阅读 · 0 评论 -
C++智能指针
本文介绍c++里面的四个智能指针: auto_ptr, shared_ptr, weak_ptr, unique_ptr 其中后三个是c++11支持,并且第一个已经被c++11弃用。为什么要使用智能指针:我们知道c++的内存管理是让很多人头疼的事,当我们写一个new语句时,一般就会立即把delete语句直接也写了,但是我们不能避免程序还未执行到delete时就跳转了或者在函数中没有执行到最后的...转载 2019-11-10 19:25:49 · 86 阅读 · 0 评论 -
两数之和
来源:力扣(LeetCode)给定一个整数数组 nums和一个目标值 target,请你在该数组中找出和为目标值的那两个整数,并返回他们的数组下标。你可以假设每种输入只会对应一个答案。但是,你不能重复利用这个数组中同样的元素。示例:给定 nums = [2, 7, 11, 15], target = 9因为 nums[0] + nums[1] = 2 + 7 = 9所以返...原创 2019-11-08 20:34:28 · 69 阅读 · 0 评论