![](https://img-blog.csdnimg.cn/20201014180756916.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
C++
Vic_Hao
这个作者很懒,什么都没留下…
展开
-
C++ 类型转换操作符
文章目录Introductionstatic_cast (编译时类型检查)dynamic_cast (运行时类型检查)ReferenceIntroductionC++中有四种类型转换操作符static_castdynamic_castconst_castreinterpret_cast大多数编程规范都指出,要使用c++的类型转换操作符,如static_cast。而坚决抵制c语言中...原创 2019-11-22 23:04:02 · 230 阅读 · 0 评论 -
C++ enum 枚举
文章目录Introduction定义和声明用法Introduction定义和声明用法一种用法是enum {one, two, three}; 就是不指定一个名字,这样我们自然也无法去定义一些枚举类型了。此时就相当于static const int one = 0; 这样就定义三个常量一样,然后用的话就是int no = one;...原创 2019-11-22 11:33:41 · 112 阅读 · 0 评论 -
C++ 运算符重载
文章目录introduction声明和定义例子Referenceintroduction运算符重载本质上是函数重载,是静态多态的一种。事实上,C++本身已经对一些运算符进行了重载。例如,+号可以对不同类型(int, float等)的数据进行加法操作;<<既是位移运算符,又可以配合cout向控制台输出数据。C++也允许程序员自己重载运算符。声明和定义返回值类型 operato...原创 2019-11-21 00:46:15 · 133 阅读 · 0 评论 -
C++ 友元
文章目录概述特性实现友元函数声明和定义示例友元类省名和定义示例概述友元提供了一种普通函数或者类成员函数访问另一个类中的私有或保护成员的机制。也就是说有两种形式的友元:友元函数友元类特性优点:提高了程序的运行效率。缺点:破坏了类的封装性和数据的透明性。实现友元函数声明和定义在类声明的任何区域内声明,而定义则在类的外部。friend <类型><友元...转载 2019-11-20 10:45:50 · 211 阅读 · 0 评论 -
C++ 多态
文章目录什么是多态多态的分类Reference什么是多态多态(polymorphism)是指计算机程序运行时,相同的消息可能会送给多个不同的类别之对象,而系统可依据对象所属类别,引发对应类别的方法,而有不同的行为。简单来说,所谓多态意指相同的消息给予不同的对象会引发不同的动作。——Wiki简而言之,多态就是能够根据不同的对象而调用不同的接口。继承是面向对象编程的重要特性之一。多态的分类...转载 2019-11-19 21:48:52 · 141 阅读 · 0 评论 -
C++ 静态绑定和动态绑定及virtual关键字
文章目录Introduction对象的静态类型对象的动态类型静态绑定动态绑定Introduction动态绑定和静态绑定是为了支持C++的多态性。下面理解四个名词:对象的静态类型对象在声明时采用的类型。是在编译期确定的。对象的动态类型目前所指对象的类型。是在运行期决定的。对象的动态类型可以更改,但是静态类型无法更改。e.g.class B {};class C: pu...原创 2019-11-19 22:53:16 · 456 阅读 · 0 评论 -
C++编译链接过程详解
C语言的编译链接过程要把我们编写的一个c程序(源代码)转换成可以在硬件上运行的程序(可执行代码),需要进行编译和链接。编译就是把文本形式源代码翻译为机器语言形式的目标文件的过程。链接是把目标文件、操作系统的启动代码和用到的库文件进行组织,形成最终生成可执行代码的过程。过程图解如下: 从图上可以看到,整个代码的编译过程分为编译和链接两个过程,编译对应图中的大括号括起的部分,其余则为链接过程。 ...转载 2018-09-01 19:27:48 · 17054 阅读 · 6 评论 -
C++ 文件操作
fstreamReference:https://www.cnblogs.com/wangjian8888/p/8484001.htmlhttps://www.cnblogs.com/ifeiyun/articles/1573134.html转载 2019-04-12 13:08:11 · 85 阅读 · 0 评论 -
c/c++中static和extern关键字
原理关于声明和定义的区别void print_one_line(void);这种写法只能叫函数声明而不能叫函数定义,只有带有函数体的声明才叫定义,比如下面:void print_one_line(void){ print("\n");}只有分配存储空间的变量声明才叫变量定义,其实函数也是一样,编译器只有见到函数定义才会生成指令,而指令在程序运行时当然也要占存储空间。那么没有函数...转载 2019-05-18 02:12:21 · 253 阅读 · 1 评论 -
C++中namespace理解
C++中的ModularizationC++的一个主要特点就是Modularization(模块化),比如说,我们可以只了解一个函数的接口的具体定义,而不了解它是怎样实现的,就能够很好的使用它。类似的,即使程序的一个部件是由多个函数组成,或者其中既有自定义类型,也有全局变量,还有函数,但我们可以这样来设想:如果这样的部件也像函数那样有一个起包装作用的接口,也同样可以只需要了解接口,而不需要了解实...转载 2019-07-13 22:55:28 · 3643 阅读 · 1 评论 -
C++调用Python
C++调用Python中的类Python程序中的类要这样定义:class XXX():不能这样定义:class XXX(object):原创 2019-07-24 13:08:50 · 108 阅读 · 0 评论 -
C++子类构造函数
构造函数是用来初始化类对象的。如果类中没有显式的声明构造函数,那么编译器会自动创建一个默认的构造函数,并且这个默认的构造函数仅仅在没有显式的声明构造函数的情况下才会被创建。构造函数与父类的其它成员不同,它不能被子类继承。因此,在创建子类对象时,为了初始化从父类中继承来的成员变量,编译器需要调用其父类的构造函数。如果子类的构造函数没有显式地调用父类的构造函数,则默认调用父类的无参构造函数,至于什么...转载 2019-07-19 23:54:04 · 1791 阅读 · 0 评论 -
C++ 函数指针
与数据一样,函数也有地址,函数的地址就是内存中存放函数语言代码的起始地址。函数指针就是指向这个地址。函数指针所指向的类型,就是函数本身。我们知道,指针所指向类型代表了指针所指向的内存区域的大小。所以函数指针所指向的类型,就是函数在内存中所占据内存的大小。知道了函数的起始地址和大小,所以函数指针可以很轻易的代替函数完成函数调用。使用函数指针的好处就是在处理“在运行时根据数据的具体状态来选择相应的处理...转载 2018-10-07 22:08:45 · 336 阅读 · 0 评论 -
C++中static关键字的作用
static的作用主要有两个方面:限定作用域;保持变量内容持久化。static关键字在C++中的用法:只在cpp内有效的全局变量:在cpp文件的全局范围内声明: static int val = 0;这个变量的含义是该cpp内有效,但是其他的cpp文件不能访问这个变量;如果有两个cpp文件声明了同名的全局静态变量,那么他们实际上是独立的两个变量;只在cpp内有效的全局...转载 2018-10-06 13:48:21 · 352 阅读 · 0 评论 -
C++中i++与++i的区别
只要不连带赋值操作时它们是等效的++i 与 i++ 的本质区别是:++i 操作除 i 之外不涉及新的(隐含的)操作数,而 i++ 则在 i 之外还涉及另一个新的(隐含的)操作数。使用建议:优先使用 ++i:(a)单独使用时:++i;(b)作为循环控制变量使用时:for(int i=0; i!=100; ++i) …**Reference:**https://blog.csdn....转载 2018-10-06 12:26:49 · 1725 阅读 · 0 评论 -
C++头文件的作用
C++编译模式通常,在一个C++程序中,只包含两类文件——.cpp文件和.h文件。其中,.cpp文件被称作C++源文件,里面放的都是C++的源代码;而.h文件则被称作C++头文件,里面放的也是C++的源代码。C++支持“分别编译”(separate compilation)。也就是说,一个程序所有的内容,可以分成不同的部分分别放在不同的.cpp文件里。.cpp文件里的东西都是相对独立的,在...转载 2018-09-04 00:12:30 · 23196 阅读 · 11 评论 -
C++ Struct(结构体)详解
C++中的结构体在C语言中,结构体不能包含函数。 在面向对象的程序设计中,对象具有状态(属性)和行为,状态保存在成员变量中,行为通过成员方法(函数)来实现。 C语言中的结构体只能描述一个对象的状态,不能描述一个对象的行为。在C++中,考虑到C语言到C++语言过渡的连续性,对结构体进行了扩展,C++的结构体可以包含函数,这样,C++的结构体也具有类的功能,与class不同的是,结构体包含的函...原创 2018-09-05 19:44:26 · 33203 阅读 · 9 评论 -
C++类中成员访问权限控制
首先解释几个特定词,下面要用到:水平权限:在一个类中,成员的权限控制,就是类中的成员函数能否访问其他成员、类的对象能否访问类中某成员。垂直权限:在派生类中,对从基类继承来的成员的访问。内部访问:类中成员函数对其他成员的访问。外部访问:通过类的对象,访问类的成员函数或者成员变量,有的书里也称之为对象访问。C++的水平权限控制当private,public,protected单纯...原创 2018-09-05 17:05:16 · 5104 阅读 · 1 评论 -
#ifndef用法
在头文件中的定义:#ifndef x //x标识的命名规则一般是头文件名全大写,前后加下划线,并把文件名中的“.”也变成下划线,先测试x是否被宏定义过 #define x //如果没有宏定义下面就宏定义x并编译下面的语句 … #endif //如果已经定义了则编译#endif后面的语句作用:在一个大的软件工程里面,可能会有多个文件同时包含一个头文件,当这些文件编...原创 2018-09-01 21:45:41 · 352 阅读 · 0 评论 -
boost::bind
最近在几经波折之后,终于对于boost::bind有点理解了。对于习惯了其他语言的人来说,boost::bind是个挺神奇的东西,它可以将你的方法适配成任何其他的方法。其实这得益于c++的模板以及操作符重载,去看boost::bind的实现就会发现它是一个有n多重载的函数,这些重载主要是为了适应函数的参数个数。其实boost::bind的原理是函数对象,而函数对象就是一个重载了()操作符的对象...转载 2018-08-28 18:59:00 · 100 阅读 · 0 评论 -
C++回调函数
使用回调函数实际上就是在调用某个函数(通常是API函数)时,将自己的一个函数(这个函数为回调函数)的地址作为参数传递给那个函数。而那个函数在需要的时候,利用传递的地址调用回调函数,这时你可以利用这个机会在回调函数中处理消息或完成一定的操作。至于如何定义回调函数,跟具体使用的 API函数有关,一般在帮助中有说明回调函数的参数和返回值等。C++中一般要求在回调函数前加CALLBACK,这主要是说明...原创 2018-08-28 16:42:17 · 270 阅读 · 0 评论 -
C++初始化列表
除了性能问题之外,有些时场合初始化列表是不可或缺的,以下几种情况时必须使用初始化列表:常量成员,因为常量只能初始化不能赋值,所以必须放在初始化列表里面 引用类型,引用必须在定义的时候初始化,并且不能重新赋值,所以也要写在初始化列表里面 没有默认构造函数的类类型,因为使用初始化列表可以不必调用默认构造函数来初始化,而是直接调用拷贝构造函数初始化。...原创 2018-08-28 14:43:30 · 647 阅读 · 0 评论 -
C++中的.和::和:和->的区别
C++的使用中我们经常会用到.和::和:和->,在此整理一下这些常用符号的区别。 A.B则A为对象或者结构体;A->B则A为指针,->是成员提取,A->B是提取A中的成员B,A只能是指向类、结构、联合的指针;::是作用域运算符,A::B表示作用域A中的名称B,A可以是名字空间、类、结构;:一般用来表示继承;...转载 2018-09-06 10:39:50 · 1417 阅读 · 0 评论 -
#define用法详解
1.define的作用在C或C++语言源程序中允许用一个标识符来表示一个字符串,称为“宏”。被定义为“宏”的标识符称为“宏名”。在编译预处理时,对程序中所有出现的“宏名”,都用宏定义中的字符串去代换,这称为“宏代换”或“宏展开”。宏定义是由源程序中的宏定义命令完成的。宏代换是由预处理程序自动完成的。在C或C++语言中,“宏”分为有参数和无参数两种。2.无参宏定义无参宏的宏名后不带参...转载 2018-09-12 16:22:36 · 353 阅读 · 0 评论 -
C++ 函数传参方式详解
在C++中,参数传递的方式主要有三种:按值传递(pass by value)地址传递(pass by pointer)引用传递(pass by reference)按值传递按值传递的过程为:首先计算出实参表达式的值,接着给对应的形参变量分配一个存储空间,该空间的大小等于该形参类型的,然后把已求出的实参表达式的值一一存入到形参变量分配的存储空间中,成为形参变量的初值,供被调用函数执行...转载 2018-10-05 23:42:50 · 542 阅读 · 0 评论 -
C++ 迭代器
Reference: 一步一步的理解C++迭代器转载 2018-09-13 18:50:00 · 85 阅读 · 0 评论 -
C++ vector
使用时需要包含头文件#include <vector>C++ vector类有两种使用方式:第一种:STL方式我们向 vector 中插入元素,而不再是索引元素,以及向元素赋值,例如 push_back()操作,就是在 vector 的后面插入一个元素 下面的 while 循环从标准输入读入一个字符串序列并每次将一个字符串插入到 vector 中 vecto...转载 2018-09-13 18:47:47 · 143 阅读 · 0 评论 -
C++ 指针
C++中变量、变量名、变量地址、指针、引用等含义 首先了解内存,内存就是一排房间,编号从0开始,0,1,2,3,4,5……房间里面一定要住人,新人住进去了,原来的人就走了;不管你住不住,里面都有人、编号就是地址、里面的人就是内容,为了我们(人)记着方便,我们给他们起些名字,如张三、李四、于是,变量,就是一个房间,它有编号(地址),他有名字(变量名),他有内容(里面的人)、int ...转载 2018-09-13 14:44:08 · 115 阅读 · 0 评论 -
C++ STL中的map容器用法详解
Map是STL的一个关联容器,它提供一对一(其中第一个可以称为关键字,每个关键字只能在map中出现一次,第二个可能称为该关键字的值)的数据 处理能力,由于这个特性,它完成有可能在我们处理一对一数据的时候,在编程上提供快速通道。这里说下map内部数据的组织,map内部自建一颗红黑树(一种非严格意义上的平衡二叉树),这颗树具有对数据自动排序的功能,所以在map内部所有的数据都是有序的,后边我们会见识到...翻译 2018-09-13 13:56:55 · 190 阅读 · 0 评论 -
C++中各种数据类型所占位数
C++中各种数据类型所占位数转载 2018-09-13 00:00:13 · 2969 阅读 · 0 评论 -
typedef用法详解
用途一:定义一种类型的别名,而不只是简单的宏替换。可以用作同时声明指针型的多个对象。比如:char* pa, pb;//这多数不符合我们的意图,它只声明了一个指向字符变量的指针和一个字符变量以下则可行:typedef char* PCHAR; // 一般用大写PCHAR pa, pb; // 可行,同时声明了两个指向字符变量的指针虽然char *pa, *pb;也可...转载 2018-09-12 17:26:53 · 1415 阅读 · 0 评论 -
嵌入式编程中的uint8_t / uint16_t / uint32_t /uint64_t
在嵌入式编程中经常遇到用uint8_t、uint16_t、uint32_t、uint_fast16_t之类的关键字定义一些整型变量,但是具体表示什么意思,并不是太清楚,只是把它当成int之类的整型变量定义关键字。在自己理解他们之前,先写一下在网上搜到的常见的对他们的解释。常见解释(都是个人见解,不一定准确全面)#define uint unsigned int; int和uint的区别:...转载 2018-09-12 16:41:21 · 8121 阅读 · 0 评论 -
C++ 引用和指针的区别
C++中,引用和指针主要三个方面的不同:不存在空引用,引用必须连接到一块合法的内存。一旦引用被初始化为一个对象,就不能指向另一个对象。指针可以在任何时候指向另一个对象。引用必须在创建的时候初始化。指针可以在任何时候被初始化。...原创 2018-05-12 20:17:03 · 117 阅读 · 0 评论