C++
深入理解C++,熟练应用C++
TB81266
机器人SLAM
展开
-
C/C++中extern关键字的使用
文章目录一、常规操作说明:一、常规操作1、extern可以位于变量或者函数前,以表示变量或者函数的定义在别的文件中,提示编译器遇到此变量和函数时在其他模块中寻找其定义。2、extern也可用来进行链接指定。说明:综上:extern有两个作用(1)当它与"C"一起连用时,如: extern "C" void fun(int a, int b);则告诉编译器在编译fun() 这个函数名时按着C的规则去翻译相应的函数名而不是C++的,而C++的规则,是在翻译这个函数名时会把fun这个名字变得面目全非,原创 2020-11-09 09:29:47 · 206 阅读 · 0 评论 -
C++多态面试题汇总
总结了一些常见的面试题,通过查阅资料给出了一些浅薄的解析,欢迎各位批评指教。inliine函数可以实虚函数码?不可以,因为inline函数没有地址,无法将他存放到虚函数表中。静态成员可以是虚函数吗?不能,因为静态成员函数中没有this指针,使用::成员函数的嗲用用方式无法访问虚函数表,所以静态成员函数无法放进虚函数表。因为:首先什么是static静态成员函数?静态成员函数不属于类中的任何一个对象和实例,属于类共有的一个函数。也就是说,它不能用this指针来访问,因为this指针指向的是每原创 2020-09-04 10:17:14 · 880 阅读 · 0 评论 -
c++11 =delete的使用
1.为什么要阻止类对象的拷贝?1)有些类,不需要拷贝和赋值运算符,如:IO类,以避免多个拷贝对象写入或读取相同的IO缓冲2.如何阻止?1)不定义拷贝构造函数和拷贝赋值运算符时,好心的编译器也会及时地学习雷锋好榜样帮你合成定义,即传说中的合成拷贝构造、合成拷贝赋值,所以这样阻止不了2)c++11允许使用“=delete”将拷贝构造函数和拷贝赋值运算符定义为删除的函数,在函数参数列表后加上“=delete”即表明这个函数是删除的函数3)删除的函数是一种这样的函数:我们虽然声明了它,但是不...转载 2020-07-13 11:33:37 · 3081 阅读 · 1 评论 -
c++11 新特性
文章目录一、列表初始化1 C++98中,标准允许使用花括号{}对数组元素进行统一的列表初始值设定。2 多个对象的列表初始化二、变量类型推导1 auto2 decltype 类型推导三、基于范围for的循环四、final和override五、委派构造函数六、默认函数控制1 显式缺省函数2 删除默认函数七、右值引用1 移动语义2 C++中的右值3 右值引用4 std::move()5 移动语义中要注意的问题一、列表初始化1 C++98中,标准允许使用花括号{}对数组元素进行统一的列表初始值设定。int a原创 2020-07-13 10:22:45 · 216 阅读 · 0 评论 -
一篇搞定 c++ 中的继承和派生
文章目录前言一、继承的概念1、类与类之间的关系2、继承关系举例3 、继承相关概念4、派生类的定义5 、继承重要说明二、派生类的访问控制1、不同的继承方式会改变继承成员的访问属性2、“三看”原则3、派生类类成员访问级别设置的原则三、继承中的构造和析构1、类型兼容性原则Code2、继承中的对象模型3、继承中的构造析构调用原则4、继承与组合混搭情况下,构造和析构调用原则5、继承中的同名成员变量处理方法6、派生类中的static关键字四、多继承前言继承性是面向对象程序设计最重要的特征,可以说,如果没有掌握继承性原创 2020-07-07 14:46:25 · 451 阅读 · 0 评论 -
C语言对文件的操作
文章目录前言前言在程序设计中,我们一般谈的文件有两种:程序文件、数据文件。程序文件:包括源程序文件(后缀为.c),目标文件(windows环境后缀为.obj),可执行程序(windows环境后缀为.exe)。数据文件:文件的内容不一定是程序,而是程序运行时读写的数据,比如程序运行需要从中读取数据的文件,或者输出内容的文件。我们会把信息输出到磁盘上,当需要的时候再从磁盘上把数据**读取(输...原创 2020-07-06 10:30:20 · 204 阅读 · 0 评论 -
extern关键字的使用
文章目录前言理解例子前言我们知道,程序的编译单位是源程序文件,一个源文件可以包含一个或若干个函数。在函数内定义的变量是局部变量,而在函数之外定义的变量则称为外部变量,外部变量也就是我们所讲的全局变量。它的存储方式为静态存储,其生存周期为整个程序的生存周期。全局变量可以为本文件中的其他函数所共用,它的有效范围为从定义变量的位置开始到本源文件结束。然而,如果全局变量不在文件的开头定义,有效的作用范围将只限于其定义处到文件结束。如果在定义点之前的函数想引用该全局变量,则应该在引用之前用关键字 extern原创 2020-07-03 17:41:30 · 155 阅读 · 0 评论 -
C/C++经典面试题(一)——常考知识点(持续更新)
文章目录前言1、引用和指针有什么区别?2、explicit(显示)关键字3、inline 内联函数4、经典面试题之new和malloc的区别5、static关键字有什么作用?前言1、引用和指针有什么区别?答案链接:https://blog.csdn.net/qq_43247439/article/details/1064674202、explicit(显示)关键字答案链接:https://blog.csdn.net/qq_43247439/article/details/1068487523、i原创 2020-07-03 08:33:00 · 1150 阅读 · 0 评论 -
explicit(显示)关键字
explicit 修饰构造函数时,可以防止隐式转换和复制初始化explicit 修饰转换函数时,可以防止隐式转换,但 按语境转换 除外explicit 使用struct A{A(int) { }operator bool() const { return true; }};struct B{explicit B(int) {}explicit operator bool() const { return true; }};void doA(A a) {}void doB.原创 2020-06-19 08:21:18 · 342 阅读 · 0 评论 -
inline 内联函数
相当于把内联函数里面的内容写在调用内联函数处相当于不用执行函数的调用步骤,直接在函数体内执行,省去了调用的环节相当于宏,但是比宏多了类型检查,具有真正的函数特性编译器一般不内联包含有循环,递归,switch等语句的函数在类声明中定义的函数,除了虚函数的其他函数都会自动的隐式的当成内联函数// 声明1(加 inline,建议使用)inline int functionName(int first, int second,...);// 声明2(不加 inline)int function.原创 2020-06-18 08:32:47 · 184 阅读 · 0 评论 -
函数模板与模板函数,类模板与模板类的区别与应用(详解)
文章目录前言(泛型编程)一、函数模板1、函数模板的概念2、函数模板的原理3、模板函数的实例化二、模板函数三、类模板1、类模板的概念及格式2、类模板的实例化3、继承中的类模板语法4、类模板语法知识体系梳理5、类模板中的static关键字四、模板类前言(泛型编程)如何实现一个通用的交换函数呢?void Swap(int& left, int& right){ int temp = left; left = right; right = temp;}void Swap(double原创 2020-06-12 09:15:56 · 526 阅读 · 3 评论 -
引用和指针有什么区别?
参考链接:https://blog.csdn.net/smartgps2008/article/details/90648015文章目录C/C++语言中,为什么使用指针?引用和指针的区别?const 对指针和引用的限制指针传递和引用传递C/C++语言中,为什么使用指针?(1)不仅仅是C/C++使用指针,任何一门语言都会使用指针。C/C++将指针暴露给了用户(程序员),而Java和C#等语言则将指针隐藏起来了。(2)使用指针的优点和必要性:指针能够有效的表示数据结构;能动态分配内存,实现内存的自原创 2020-06-01 15:33:59 · 743 阅读 · 1 评论 -
经典面试题之new和malloc的区别
文章目录1、属性2、参数3、返回类型4、分配失败5、自定义类型6、重载7、内存区域8、有了malloc,为什么还要有new?1、属性new/delete是C++的运算符(关键字),需要编译器支持。malloc/free是库函数,需要头文件支持。2、参数使用new操作符申请内存分配时无须指定内存块的大小,编译器会根据类型信息自行计算。而malloc则需要显式地指出所需内存的尺寸。3、返回类型new操作符内存分配成功时,返回的是对象类型的指针,类型严格与对象匹配,无须进行类型转换,故new是符合类型原创 2020-06-01 10:01:43 · 686 阅读 · 0 评论 -
STL vector的内部实现原理及基本用法
本文基于STL vector源代码,但是不考虑分配器allocator,迭代器iterator,异常处理try/catch等内容,同时对_Ucopy()、 _Um...转载 2020-05-23 21:42:32 · 301 阅读 · 0 评论 -
shared_ptr(智能指针)详解
问题:为了使 new 动态分配的内存空间在程序的各条执行路径都能被释放,避免发生内存泄漏,引入shared_ptr(c++11)。解决方案:C++ 11 模板库的 头文件中定义的智能指针,即 shared _ptr 模板,就是用来部分解决这个问题的。如何解决:只要将 new 运算符返回的指针 p 交给一个 shared_ptr 对象“托管”,就不必担心在哪里写delete p 语句——实际上根本不需要编写这条语句,托管 p 的 shared_ptr 对象在消亡时会自动执行delete p。而且,原创 2020-05-23 13:15:37 · 11016 阅读 · 0 评论 -
c语言简易通讯录
1、main.cpp#include<vld.h>#include"UpgradeContact.h"void Menu(){ printf("*************通讯录**************\n"); printf("* [1] Add [2] Del *\n"); printf("* [3] Find [4...原创 2020-04-26 12:30:18 · 480 阅读 · 0 评论 -
C语言中文件操作概述
文章目录一、文件缓冲区二、文件指针三、文件的打开和关闭四、文件的顺序读写一、文件缓冲区ANSIC 标准采用“缓冲文件系统”处理的数据文件的,所谓缓冲文件系统是指系统自动地在内存中为程序中每一个正在使用的文件开辟一块“文件缓冲区”。从内存向磁盘输出数据会先送到内存中的缓冲区,装满缓冲区后才一起送到磁盘上。如果从磁盘向计算机读入数据,则从磁盘文件中读取数据输入到内存缓冲区(充满缓冲区),然后再从缓...原创 2020-04-19 23:21:28 · 290 阅读 · 0 评论 -
C/C++程序的内存开辟
C/C++程序内存分配的几个区域:栈区(stack):在执行函数时,函数内局部变量的存储单元都可以在栈上创建,函数执行结束时这些存储单元自动被释放。栈内存分配运算内置于处理器的指令集中,效率很高,但是分配的内存容量有限。 栈区主要存放运行函数而分配的局部变量、函数参数、返回数据、返回地址等。堆区(heap):一般由程序员分配释放, 若程序员不释放,程序结束时可能由OS回收 。分配方式类...原创 2020-04-18 22:24:55 · 324 阅读 · 0 评论 -
动态内存管理
一、为什么存在动态内存分配我们已经掌握的内存开辟方式有:int val = 20;//在栈空间上开辟四个字节char arr[10] = {0};//在栈空间上开辟10个字节的连续空间但是上述的开辟空间的方式有两个特点:空间开辟大小是固定的。数组在申明的时候,必须指定数组的长度,它所需要的内存在编译时分配。但是对于空间的需求,不仅仅是上述的情况。有时候我们需要的空间大小在程序运...原创 2020-04-18 22:08:07 · 240 阅读 · 0 评论 -
C++中的sort函数和qsort函数的用法和区别
文章目录一、sort()函数1、sort()函数基本语法一、sort()函数1、sort()函数基本语法sort(首指针,尾指针,排序方法)普通用法可以没有排序方法,默认情况下是升序。使用sort函数时,必须引用#include<iostream>, #include<algorithm>两个头文件,和命名空间namespace std 或者std::sort()...原创 2020-04-17 16:09:49 · 408 阅读 · 0 评论 -
c语言中的位段
1、位段的概念?什么是位段?位段的声明和结构是类似的,有两个不同:位段的成员必须是int、unsigned int 或signed int 。位段的成员名后边有一个冒号和一个数字。struct A{ int _a:2; int _b:5; int _c:10; int _d:30;};A就是一个位段类型。那位段A的大小是多少?位域的存储两个限制条件:不能跨字节存储...原创 2020-04-17 10:52:46 · 377 阅读 · 0 评论 -
结构体内存对齐
1、首先得掌握结构体的对齐规则:默认对齐值是最大的值是8个字节基本数据类型有一个对齐值(就是int char double 等类型的字节空间)自定义类型也有一个对齐值,是内部成员的最大值程序指定对齐值 #pragma pack(n) n = 2的幂次方程序的有效对齐值,程序指定对齐值和数据类型对齐值得较小值2、为什么存在内存对齐?大部分的参考资料都是如是说的:平台原因(移植原...原创 2020-04-17 01:13:19 · 122 阅读 · 0 评论 -
Windows下利用cmd运行程序,出现“warning: no newline at end of file”解决方案
windows下,在用编辑器Notepad++和编译器minGN编写运行代码时,在终端出现了这样的错误。为什么会有这个问题?google了一下,产生的原因是源文件的最后一行没有回车符造成的。看了一下源文件,果然如此。解决的方案很简单: 在最后一行敲一个回车,多出一个行, 然后保存,即可。...原创 2020-04-16 09:14:44 · 618 阅读 · 0 评论 -
c/c++中的字符函数和字符串函数
C语言中对字符和字符串的处理很是频繁,但是C语言本身是没有字符串类型的,字符串通常放在 常量字符串 中或者 字符数组 中。 字符串常量 适用于那些对它不做修改的字符串函数.文章目录1、strlen函数2、strcpy函数3、strcat函数4、strcmp函数1、strlen函数size_t strlen ( const char * str );字符串已经 '\0’作为结束标志,str...原创 2020-04-14 00:50:53 · 225 阅读 · 0 评论 -
c++中多态相关的面试题目
文章目录1、是否可将类的每个成员函数都声明为虚函数,为什么?2、谈谈对多态的理解3、谈谈你对重写,重载理解4、为什么要定义虚析构函数?1、是否可将类的每个成员函数都声明为虚函数,为什么?答:可以,但不建议加virtual关键字。因为,出于效率考虑,没有必要将所有成员函数都声明为虚函数,通过虚函数表指针VPTR调用重写函数是在程序运行时进行的,因此需要通过寻址操作才能确定真正应该调用的函数。而普...原创 2020-04-11 00:57:15 · 433 阅读 · 0 评论 -
C++中的多态原理探究
文章目录一、多态1、多态问题抛出2、面向对象新需求3、如何解决这样的情况呢?4、多态案例5、多态的理论基础二、多态原理探究1、多态的实现原理2如何证明vptr指针的存在3、构造函数中能调用虚函数,实现多态吗?一、多态1、多态问题抛出如果子类定义了与父类中原型相同的函数会发生什么?在子类中定义与父类中原型相同的函数,函数重写只发生在父类与子类之间。代码如下:#include<iost...原创 2020-04-11 00:22:35 · 335 阅读 · 0 评论 -
c语言的灵魂——指针
文章目录前言一、指针的基本概念前言指针是指向另外一种类型的复合类型,指针实现了对其他对象的间接访问。指针本身是一个对象,允许对指针赋值和拷贝,而且在指针的生命周期内它可以先后指向几个不同的对象。指针无需再定义的时候赋值。和其他内置的类型一样,在块作用域内定义的指针如果没有被初始化,也将拥有一个不确定的值。一、指针的基本概念1、指针的概念指针(Pointer)是编程语言中的一个对象,利用地...原创 2020-04-10 14:27:46 · 527 阅读 · 0 评论 -
深度剖析数据在内存中的存储
文章目录1、数据类型介绍二、整形在内存中的存储三、浮点型在内存中的存储1、数据类型介绍常见的 数据类型char //字符数据类型short //短整型int //整形long //长整型long long //更长的整形float //单精度浮点数double //双精度浮点数//C语言有没有字符串类型?以及他们所占存储空间的大小。 类型的意义:使用这个类型开辟内存空间...原创 2020-04-09 16:52:56 · 383 阅读 · 0 评论 -
c++中类对象的构造和析构
文章目录前言一、构造和析构函数前言创建一个对象时,常常需要作某些初始化的工作,例如对数据成员赋初值。注意,类的数据成员是不能在声明类时初始化的。为了解决这个问题,C++编译器提供了构造函数(constructor)来处理对象的初始化。构造函数是一种特殊的成员函数,与其他成员函数不同,不需要用户来调用它,而是在建立对象时自动执行。一、构造和析构函数构造函数1、构造函数定义及调用(1)C...原创 2020-04-06 16:37:30 · 998 阅读 · 0 评论 -
inline内联函数的使用
一、inline内联函数C++中的const常量可以替代宏常数定义,如:const int A = 3; 等价于 #define A 3那么,C++中是否有解决方案替代宏代码片段呢?在C++中,推荐使用内联函数替代宏代码片段,C++中使用inline关键字声明内联函数。需要注意的是:内联函数声明时inline关键字必须和函数定义结合在一起,否则编译器会直接忽略内联请求。必须inlin...原创 2020-04-03 17:58:21 · 253 阅读 · 0 评论 -
c++ 中的引用
文章目录1 引用概念2 引用是C++的概念3 引用做函数参数4 引用的意义5 引用本质思考6 引用的本质7 引用结论8 函数返回值是引用(引用当左值)9 指针引用10 常引用1 引用概念在C++中新增加了引用的概念引用可以看作一个已定义变量的别名引用的语法:Type& name = var;引用做函数参数?(引用作为函数参数声明时不进行初始化)#include<io...原创 2020-04-03 16:53:42 · 296 阅读 · 0 评论 -
c/c++中const的使用
文章目录一、const限定符二、 const和#define相同之处一、const限定符有时候我们希望定义这样一种变量,它的值不能被改变。具体的应用如下,直接上代码:#include<iostream>using namespace std;//Const 使用的好处//合理的利用const,//1指针做函数参数,可以有效的提高代码可读性,减少bug;//2清楚的分清...原创 2020-04-02 21:13:02 · 134 阅读 · 0 评论 -
c++对c语言中 register关键字增强
register关键字请求编译器让变量x直接放在寄存器里面,速度快。而在c语言中,register修饰的变量不能取地址,但是在c++里面做了内容:1、register关键字的变化:(1)register关键字请求“编译器”将局部变量存储于寄存器中 ,C语言中无法取得register变量地址,C++中可以取得register变量的地址 。(2)在C++中依然支持register关键字,C++编...原创 2020-03-30 23:39:13 · 197 阅读 · 0 评论 -
C语言和 C++语言关系
文章目录一、C语言是在实践的过程中逐步完善起来的二、C语言的目标是高效三、C语言和C++之间的关系一、C语言是在实践的过程中逐步完善起来的没有深思熟虑的设计过程使用时存在很多“灰色地带”残留量过多低级语言的特征直接利用指针进行内存操作二、C语言的目标是高效最终程序执行效率的高效当面向过程方法论暴露越来越多的缺陷的时候,业界开始考虑在工程项目中引入面向对象的设计方法,而第一个需要...原创 2020-03-30 23:01:03 · 1276 阅读 · 0 评论 -
c/c++中sizeof()、strlen()、length()、size()详解和区别
一、求数组或字符串的长度1、sizeof()——返回所占总空间的字节数,单位是字节。(1)、对于整型字符型数组(2)、对于整型或字符型指针sizeof()是运算符,其值在编译时就已经计算好了,参数可以是数组、指针、类型、对象、函数等。它的功能是:获得保证能容纳实现所建立的最大对象的字节大小。由于在编译时计算,因此sizeof不能用来返回动态分配的内存空间的大小。2、strlen()——返...原创 2020-03-29 13:50:01 · 447 阅读 · 0 评论 -
C语言实现简单的扫雷游戏
文章目录1、头文件 game.h2、游戏主函数 test.c3、函数实现函数 game.c4、实现说明1、头文件 game.h#include<stdio.h>#include"stdlib.h"#include"time.h" #define COL 9#define ROW 9#define COLS COL+2#define ROWS ROW+2#define ...原创 2020-03-28 23:59:20 · 307 阅读 · 0 评论 -
递归的使用?
一、什么是递归?直接或间接的调用自己的函数称为递归函数。 一个过程或函数在其定义或说明中有直接或间接调用自身的一种方法,它通常把一个大型复杂的问题层层转化为一个与原问题相似的规模较小的问题来求解,递归策略只需少量的程序就可描述出解题过程所需要的多次重复计算,大大地减少了程序的代码量。 递归的主要思考方式在于:把大事化小最简单的递归:数n的阶乘是从 1到n的乘积。#include<ios...原创 2020-03-26 13:34:31 · 204 阅读 · 0 评论 -
C/C++中的#define的使用
一、#define在c/c++中的使用在C或C++语言源程序中允许用一个标识符来表示一个字符串,称为“宏”。被定义为“宏”的标识符称为“宏名”。在编译预处理时,对程序中所有出现的“宏名”,都用宏定义中的字符串去代换,这称为“宏代换”或“宏展开”。宏定义是由源程序中的宏定义命令完成的。宏代换是由预处理程序自动完成的。1、在C或C++语言中,“宏”分为有参数和无参数两种。(1)无参数的“宏”其...原创 2020-03-25 23:17:48 · 1153 阅读 · 0 评论 -
c与c++中的static关键字
在c语言中:一、static是用来修饰变量和函数的:1、修饰局部变量——静态局部变量//未加static关键字#include <stdio.h>void test(){ int i = 0; i++; printf("%d ", i);}int main(){int i = 0; for (i = 0; i<10; i++){ test(); }...原创 2020-03-25 20:53:35 · 194 阅读 · 0 评论 -
什么是类 ? 什么是对象 ? 类和对象有什么关系 ?什么是封装?什么是继承?
1、什么是类?(1)类是一种抽象的概念。(2)类:具有相同特性(数据元素)和行为(功能)的对象的抽象就是类。因此,对象的抽象是类,类的具体化就是对象,也可以说类的实例是对象,类实际上就是一种数据类型。类具有属性,它是对象的状态的抽象,用数据结构来描述类的属性。类具有操作,它是对象的行为的抽象,用操作名和实现该操作的方法来描述。2、什么是对象?(1)对象是一种具体的概念。(2)对象:对象是...原创 2020-03-23 22:02:35 · 15509 阅读 · 0 评论