c++
文章平均质量分 80
头号理想
四面佛保佑
展开
-
c++虚函数内存模型(面试入坑之后的通透)
昨天腾讯复试面试官对我一顿爆锤 其中就有c++对象模型然后我决定研究一下这方面的知识 同时也记录下来 分享给大家开始最最简单的类 只有成员变量首先我们简单写一个类 然后使用c++内置方法 查看内存中的相对位置class Base1{public: int base1_1; int base1_2;};int main() { cout <<"sizeof(Base1) :"<< sizeof(Base1) << endl;原创 2021-03-26 21:32:32 · 768 阅读 · 0 评论 -
【游戏开发岗面经总结7】(函数调用底层,值捕获和引用捕获,宏定义和内联,排序算法稳定性,static,软工思想,sprite和image的区别,细小物体碰撞问题)
树的种类完全二叉树对于一颗二叉树,除了最外层可以不满,其他层上都是紧密排列平衡二叉树(AVL)左右两个子树的高度差的绝对值不超过1,并且左右两个子树都是平衡二叉树二叉查找树(BST 二叉搜索树)没有相同的节点如果左子树不为空,则左子树上所有的节点均小于它根节点的值如果右子树部位空,则右子树上所有的节点均小于它根节点的值任意节点的左右子树均为二叉查找树红黑树特殊的 二叉查找树 具有二叉查找树的所有的特性每个节点都是黑色或者红色的,根节点是黑色 叶子节点为空的黑色节点树的路径上不能出现原创 2021-03-22 21:26:44 · 415 阅读 · 3 评论 -
c++STL容器特点以及底层实现
什么是STL标准模板库,是一个高效的c++程序库包含了诸多基本数据结构和基本算法,高度体现了软件的可复用性容器vector是一种序列式容器,和数组差不多,他比数组更加优越,数组不能动态扩展,因此程序运行的时候不是浪费内存就是数组越界vector正好弥补了这个缺点,它相当于是一个可拓展的数组(动态数组)随机访问快,中间插入删除慢 末端插入删除快特点拥有一段连续的内存空间,起始地址不变,它能非常好的支持随机存取([ ])但是由于内存空间是连续的 所以在中间插入和删除数据的造成内存块的拷贝原创 2021-03-14 17:20:39 · 538 阅读 · 0 评论 -
c++三种智能指针以及相关知识自写智能指针
shared_ptr每种指针都是以类模板的方式实现的,shared_ptr也不例外,shared_ptr(T是指针指向的具体数据类型)的定义位于头文件,并且位于std命名空间中#include<memory>using namespace std;和unique_ptr以及weak_ptr指针不同的地方在于:多个shared_pt智能指针可以使用同一块堆内存,并且该类型只能指针在实现上采用的是引用计数机制即使有一个shared_ptr放弃了堆内存的使用权 (引用计数减1) 也不会原创 2021-03-04 11:31:07 · 576 阅读 · 2 评论 -
请让我分清c++的重载,重写,重定义
c++的重载,重写,重定义这三个概念特别相似而且名字又差不多 所以直到刚刚我才彻底分清这三个的异同重载 overload函数名相同,参数列表不同,重载只是在类的内部存在,不能靠返回值类型来判断class Base { virtual void display() { cout << "基类的display()" << endl; } void say() { cout << "基类的say()" << endl; }public:原创 2021-02-02 20:53:34 · 117 阅读 · 0 评论 -
c++优先队列(最大堆)的基本用法以及排序用法(cmp)
c++的queue中有一种优先队列 他会自动按要求递增或者递减排序在写一些算法题的时候可以起到很好的辅助作用今天给大家简单介绍一下这些优先队列既然是队列那么先要包含头文件#include ,他和queue不同的就在于我们可以自定义其中数据的优先级, 让优先级高的排在队列前面,优先出队优先队列也具有普通队列的所有的特性 比如size等等 其本质是用堆实现的 所以又称为最大(小)堆定义priority_queue<Type,Container,Functional>其中:Typ原创 2021-01-22 20:49:54 · 4402 阅读 · 0 评论 -
c++四种类型转换
c++有四种类型转换的方式const_cast用于去掉const或者volatile说到了const 在这里提一下const简单理解:const的目的就是定义一个“不会被修改的常量”,可以修饰变量,指针,引用,函数参数等等使用const可以减少代码出错的概率,int main() { struct T { int i= -1; }; const T a; //a.i = 100; T& b = const_cast<T&>(a); b.i = 10原创 2021-01-14 16:59:52 · 328 阅读 · 0 评论 -
c++虚函数和纯虚函数以及static关键字
c++的多态以及虚函数,纯虚函数都是面试常问的问题所以我今天专门更新一篇关于c++的虚函数和纯虚函数的博文虚函数的语法在类成员方法的声明语句之前加上virtual 他就会变成虚函数在虚函数的声明语句末尾加上**=0** 他就会变成纯虚函数子类可以重新定义基类的虚函数 (复写,重写)在之前的unity开发中我也经常用到多态不管是虚函数还是纯虚函数,基类都可以提供其的实现,子类可以自主选择是否提供一份属于自己的个性虚函数的实现子类必须提供属于自己的纯虚函数的实现,否则编译失败会产生报错下面我们原创 2021-01-06 21:42:21 · 903 阅读 · 0 评论 -
c++函数探幽(内联函数,引用变量,多态(虚函数),友元类(函数))
内联函数内联函数是c++中为了提高程序运行速度所做的一个改进常规函数和内联函数的主要的区别不在于编写方式,而在于c++你一起如何将其组合在程序中去常规函数在运行过程中,执行到程序调用指令的时候,程序将在函数调用之后立即存储该指令的内存地址,将函数参数复制到堆栈跳到标记函数起点的内存单元,执行函数代码,然后跳回到地址被保存的地址指令处。来回跳跃并记录跳跃位置意味着以前使用函数的时候需要一定的开销c++内联函数提供了另一种选择,编译器将使用相应的函数代码替换函数调用,对于内联代码,函数无需跳到另一个原创 2021-01-03 19:37:57 · 285 阅读 · 0 评论 -
游戏研发岗面试中对于c++常遇到的问题(1)(析构函数,const关键字)
析构函数c++中类的析构函数是类的一种特殊的成员函数,在每次删除所创建的对象的时候执行析构函数不像构造函数一样可以带参数,析构函数不可带参数析构函数的名称和类的名称是完全相同的,前面加了(~)做前缀,不会返回任何值析构函数有助于在跳出程序(关闭文件,释放内存)前释放资源class Line{public: Line(void) { cout << "该对象被创建" << endl; } ~Line(void) {原创 2020-12-30 16:12:22 · 155 阅读 · 0 评论 -
c++归并排序
#include <iostream>#include<vector>#include<algorithm>#include<Stack>#include <string> #include<map>#include<set>#include <stdio.h>#include <stdlib.h>using namespace std; void MergeSort(vect原创 2020-11-05 15:09:55 · 72 阅读 · 1 评论 -
c++模板类(实现栈的一些操作)
之前我写过一篇c++的模板函数,这篇博客使用模板函数和模板类实现一下简易化的栈模板函数的博客地址和定义函数模板一样,我们可以定义类模板,泛型类声明的一般形式如下:template <class type> class class-name {...}然后我们简单实现一下栈#include <iostream>#include<vector>#include<algorithm>#include<deque>using n原创 2020-10-19 19:40:57 · 566 阅读 · 0 评论 -
c++类和对象扩展
定义成员函数c++在定义成员函数可以定义在类定义内部,或者单独使用范围解析运算符 :: 来定义内部定义class TestVoidClass {public: int a; int b; int c; int addall() { return a + b + c; }};int main() { TestVoidClass t; t.a = 1; t.b = 1; t.c = 1; cout << "a+b+c=" << t.addall();原创 2020-10-18 16:40:51 · 661 阅读 · 0 评论 -
c++模板
在c++中也存在泛型变成的理念(不考虑具体数据类型的变成方式)之前我写过一篇unity中c#的使用泛型的方法 大家有兴趣可以去自己查看就用交换两个值的为例子 假如说我们要交换两个值我们可能只会每种类型都写一种void Swap(int a, int b)//int类型{ int tmp = a; a = b; b = tmp;}void Swap(double a, double b)//double类型{ double tmp = a; a = b; b = tmp;}这原创 2020-10-17 10:05:35 · 102 阅读 · 0 评论 -
c++重载运算符和重载函数
C++ 允许在同一作用域中的某个函数和运算符指定多个定义,分别称为函数重载和运算符重载。重载声明是指一个与之前已经在该作用域内声明过的函数或方法具有相同名称的声明,但是它们的参数列表和定义(实现)不相同。当您调用一个重载函数或重载运算符时,编译器通过把您所使用的参数类型与定义中的参数类型进行比较,决定选用最合适的定义。选择最合适的重载函数或重载运算符的过程,称为重载决策。c++中函数的重载实例同名函数 print() 被用于输出不同的数据类型:#include <iostream>原创 2020-10-16 19:41:07 · 377 阅读 · 1 评论