C++
文章平均质量分 62
.
竹剑单
这个作者很懒,什么都没留下…
展开
-
C++ 函数指针变量和类型
要调用的函数int gg(int a, int b){ return a + b;}函数指针变量 int (*f1)(int, int); //1 function<int(int, int)> f2 = gg; //2 f1 = gg; f1(1, 2); f2(1, 2);函数指针类型 typedef int (*func1)(int, int); //1 using func2 = int (*)原创 2021-06-09 19:06:02 · 110 阅读 · 0 评论 -
C++ 向上转型和向下转型的含义以及使用场景
向上转型派生类对象转型为基类对象(包括指针和对象),直接转化由编译器自动完成,不用cast,并且是绝对安全的。内存里面:基类对象相当于只是换了个地址。换成了派生类对象中存储基类成员的内存地址。但是派生类对象中有的,基类没有的那些变量仍然留在了内存中。(保留了再次从基类转换成派生类的可能性)向下转型不能在对象之间转换。只能在指针和指针之间、基类左值和派生类引用之间转换。危险是什么意思?应该是指把基类对象的地址给了派生类对象(向下转换)。派生类对象如果拥有自己独有,而基类没有的成员变量,就是危险的。因原创 2021-06-04 22:03:29 · 2616 阅读 · 2 评论 -
C++ RTTI 机制下判断类型的 typeid 和记录类型信息的 type_info
RTTIRTTI(RunTime Type Identification),运行时类型识别。C++ 是允许在程序运行过程中,根据指针和引用的实际类型来决定执行方法的(动态多态)。因为运行时变量声明的类型和实际的类型可能不一样,所以就有了RTTI。RTTI包含两个内容:typeid 和 dynamic_cast。typeid 用来确定目标的实际类型是什么。dynamic_cast 用于基类向派生类的向下转型。typeid用于判断目标类型。typeid(n),参数n可以是类型、变量、字面量等,typeid原创 2021-06-04 01:24:00 · 993 阅读 · 0 评论 -
C++ using 关键字的三种作用
使用命名空间编程过程中有很多的类名和函数名,很容易重复,因此C++引入了命名空间供开发者使用。C++ 最有名的就是 STL 库(Standard Template Library)了吧。using namespace library; //作用域中出现的没有指明命名空间的函数都会去library库中搜索,有符合的就调用using library::function //作用域中使用function函数时,会调用library库中的该函数//当同一个函数在使用的多个库中有命名重复时,编译器会报错,原创 2021-06-01 05:49:10 · 778 阅读 · 0 评论 -
C++ typename 模板参数和标识嵌套依赖类型名的作用
模板类型参数在泛型编程中,typename 和 class 都可以作为模板类型参数,是一样的。template<class T> //等同于 template<typename T>class Animal {public: T name;};在模板中标识嵌套依赖类型名称规则:不管是在模板函数还是模板类中,如果有使用 嵌套依赖类型名称 nested dependent type name 的话,都需要在他的前面加上 typename。先不管概念,直接从实际出发看看原创 2021-06-01 03:41:04 · 871 阅读 · 0 评论 -
C++ 内存对齐
内存对齐存在的意义为了加快CPU读取内存的效率。CPU读取内存并不是一个字节一个字节地读取,而是两个、四个、八个…三十二个地读取,一次读取大小叫做内存存取粒度。为了配合这样的读取方式,才有了内存对齐的要求。如果CPU一个一个字节地读取,就不需要内存对齐了。所谓的“加快”,指的是让CPU读取的时候一次尽量可以读出完整的数据,而不是分几次读取。内存对齐的规则可以通过#pragma pack(n)设置内存对齐的字节数,其中 n = 1, 2, 4, 8, 16。gcc 默认n = 4。1、对齐单位等于内存原创 2021-05-29 17:59:12 · 182 阅读 · 1 评论 -
C++ 逐步解析 (func)*((int*)*(int*)(&d)) 如何获取虚函数表以及虚函数地址
虚函数的作用、原理等具体内容可以看我的另一篇文章 C++ 虚函数详解这里讨论如何通过对象找到他的虚函数表还有相应的虚函数。相关概念:变量:不管是用int还是int*声明的变量,本质上都是一样的,都存储在内存中,都具有两个要素:地址和内容。地址:指变量存储在内存中的地址,一般用16进制表示,如0x61febc。可以用 & 对一个变量进行取址,返回的就是变量地址。内容:指存储在内存中的内容,如char大小为一个字节,那么他就可以表示2的8次方个字符。(ASCII码决定了什么数位表示什么字符)。原创 2021-05-29 15:18:12 · 856 阅读 · 2 评论 -
C++ 类成员的访问权限和类的继承方式
类成员的访问权限类的成员包括成员变量和成员函数。他们的访问权限由pulibc、protected、private决定。省略不写时(默认)等同于private。1、public:公开的,在派生类中可以访问,外部也可以通过对象访问。2、protected:保护的,在派生类中可以访问,外部不能通过对象访问。3、private:私人的,派生类和对象都不能访问。这里说的不能通过对象访问,包含由本类 new 出来的对象。所以只有当成员为public时,才可以通过对象访问。类的继承方式类成员的访问权限原创 2021-05-27 22:53:50 · 607 阅读 · 0 评论 -
C++ 虚函数详解
文章目录虚函数的作用虚函数的原理:虚函数表指针和虚函数表虚函数表存储虚函数的顺序析构函数和虚函数纯虚函数虚函数的作用虚函数是为了实现动态多态。多态是指为不同的数据类型提供统一的接口,分为静态多态和动态多态。静态多态包括函数重载和模板函数,动态多态是:指针或引用类型可以根据运行中实际指向的派生类型的不同,来执行不同派生类的方法。举个例子,有一个基类 Character 表示职业统称,玩家会选择职业战士 Warrior 或者魔法师 Magician,然后所有的逻辑例如攻击,防守都会根据玩家选择的不同职业有原创 2021-05-27 14:17:12 · 9067 阅读 · 7 评论