UE-面试问题

虚函数与纯虚函数的区别

虚函数和纯虚函数的区别:1、纯虚函数只有定义,没有实现;而虚函数既有定义,也有实现的代码。2、包含纯虚函数的类不能定义其对象,而包含虚函数的则可以。

虚函数(impure virtual)

  C++的虚函数主要作用是“运行时多态”,父类中提供虚函数的实现,为子类提供默认的函数实现。
  子类可以重写父类的虚函数实现子类的特殊化。

纯虚函数(pure virtual)

  C++中包含纯虚函数的类,被称为是“抽象类”。抽象类不能使用new出对象,只有实现了这个纯虚函数的子类才能new出对象。
  C++中的纯虚函数更像是“只提供申明,没有实现”,是对子类的约束,是“接口继承”。
  C++中的纯虚函数也是一种“运行时多态”。

智能指针

在C++中没有垃圾回收机制,必须自己释放分配的内存,否则就会造成内存泄露。解决这个问题最有效的方法是使用智能指针(smart pointer)。智能指针是存储指向动态分配(堆)对象指针的类,用于生存期的控制,能够确保在离开指针所在作用域时,自动地销毁动态分配的对象,防止内存泄露。智能指针的核心实现技术是引用计数,每使用它一次,内部引用计数加1,每析构一次内部的引用计数减1,减为0时,删除所指向的堆内存。

 c++中用的最多的是下面三种智能指针

C++11中提供了三种智能指针,使用这些智能指针时需要引用头文件

std::shared_ptr:共享的智能指针
std::unique_ptr:独占的智能指针
std::weak_ptr:弱引用的智能指针,它不共享指针,不能操作资源,是用来监视shared_ptr的。
 

具体详情:c++11之智能指针_峰上踏雪的博客-CSDN博客_智能指针 

蓝图之间的通信

一、直接通信

直接通信的方式是最常用的也是最好理解的。比如两个蓝图类中,一个蓝图想要调用另外一个蓝图中的参数或者函数,就可以使用这种方法。

举个例子:当玩家按F的时候,灯就没了。

这里会用到初学者包中的灯蓝图,将这个蓝图拖入到场景中,打开这个蓝图,你会发现他里面的组件有一个static mesh 一个是point light。我们做开关灯其实就是对pointlight进行操作,那么我们在控制第三人称角色的时候,要如何改变这个灯蓝图中的属性呢?首先应该创建一个控制的灯的引用,对这个灯的引用进行操作。

在做完上面的操作后,回到关卡界面点击人物蓝图,记得要把我们的实例赋值给这里的引用!

二、cast类型转换

类型转换的原理是这样的:大多数情况是使用在人物身上有一个collision,然后当控制的人物触发了时,通过cast节点来改变碰到的actor中的某一变量。

三、事件分发器event dispatchers

事件分发器是使用:有一个需要发送事件的actor需要配置一个事件分发器。其他的所有的actor都可以对这个事件分发器进行监听(绑定事件到这个事件分发器器上)。当这些actor听到调用这件分发器的命令的时候,就会进行工作。

将这个事件分发器的流程比喻一下就是:  我们现在有个叫(老师)的蓝图,在这个蓝图下面有个事件分发器homework。有三个学生A、B、C,他们都在监听老师这个homework事件分发器,他们三个人听到命令的反应不一样,A是写作业B是抄作业C是撕作业。于是某一天下午,老师call了一下这个事件分发器(下发了作业),ABC三个人都听到了,然后就会开始干他们对应的事情。

就比如上图所示,我们将一个叫抄作业的自定义事件绑定给我们的homework事件分发器,当事件分发器进行执行的时候(call)就会自动执行抄作业事件的活动了!

四、接口

接口可以给多的actor进行使用,所有使用这个定义的接口的actor都可以使用这个接口中的方法。

比如我们写一个当玩家走到门面前的时候门自动开启的蓝图时,便可以通过当玩家碰到某个actor的时候,就会触发一个蓝图接口的通信,告知碰撞到的actor,现在你可以使用这个接口的方法了,如果它是有用这个蓝图的方法的话,就会使用这个方法。比如上图所示当玩家触碰到门的时候就会发送一个接口通信告诉门,门接收到这个消息的时候,就会查看自己时候有对应的使用这个接口的地方,哎有!于是就出发开门的方法。
 

虚析构

总的来说虚析构函数是为了避免内存泄露,而且是当子类中会有指针成员变量时才会使用得到的。也就说虚析构函数使得在删除指向子类对象的基类指针时可以调用子类的析构函数达到释放子类中堆内存的目的,而防止内存泄露的。

详细虚析构函数的作用_accepted_accepted的博客-CSDN博客_虚析构函数的作用

函数与事件的区别 

一、函数有返回值,事件无返回值(因此无法简单用if,决定返回其中一条执行结果)

二、函数调用会等待函数执行结果,事件调用只是触发但不会等待。

三、函数执行在同一个线程,事件执行在不同线程。

四、函数可以用局部变量,事件没有局部变量。

 五、因为函数执行顺序有保证,所以优先使用函数

六、没有返回值的函数,在被子类Overide时,会变成事件。

七、函数无法调用delay,timeline,事件可以

ue4 函数和宏区别_UE4(蓝图)函数,事件,宏的区别_谢凌曦的博客-CSDN博客

 

渲染管线

渲染引擎:对各种模型进行染色、光照、阴影等渲染,绘制出屏幕画面的功能模块。

渲染管线:严格来讲,是GPU处理数据生成图像的整个过程

渲染流程:图像绘制的流程。CPU和GPU一起完成的

 

UE-面试问题_第1张图片

 

UE-面试问题_第2张图片

工具阶段:制作模型(定义几何和表面特性)

资产调节阶段:转换模型格式(处理几何和材质)

应用程序阶段:为渲染管线做准备。准备要渲染的模型(网格)

几何阶段:处理网格顶点数据,转成屏幕空间的顶点信息

光栅化阶段:着色,输出最终效果

 

你可能感兴趣的:(c++,开发语言)