C++
文章平均质量分 73
东东7_7
这个作者很懒,什么都没留下…
展开
-
UE资源加载
硬性引用,即对象 A 引用对象 B,并导致对象 B 在对象 A 加载时加载。通俗点说,硬引用所表示的资源在引用初始化时就加载进内存,因此硬引用的资源几乎不需要加载方法。在UE4中,如果有一个硬UObject指针属性引用了一个资源(往往在蓝图上设置引用),则加载包含这个属性的对象(放在贴图中,或者从gameinfo等引用)时,就会加载这个资源。UE4的资源,就是在工程文件夹下的哪些非代码资源,比如Content下面的网格,材质,蓝图这些文件,大部分是以uasset作为后缀的UE资源文件。原创 2023-04-19 11:33:10 · 668 阅读 · 0 评论 -
C++命名规则
因为同一作用范围内两样不同的东西不能重名,你可能会随手改掉其中一个的名称,有时干脆以错误的拼写充数,结果就会出现在更正拼写错误后导致编译器出错的情况。采用能表达意图的名称,貌似拉长了函数代码,但要想想看,WORK_DAYS_PER_WEEK比数字5好找得多,而列表中也只剩下了体现作者意图的名称。设想有一个名为Customer的类,还有一个名为CustomerObject的类,它们的区别何在呢?命名的方式应该是以名词为主,清晰的表达类的功能,方法应当以动词为主,表现其做了什么事情,并且得到什么结果。原创 2022-10-31 17:15:52 · 580 阅读 · 0 评论 -
内存的智能管理—智能指针
前言我们在使用C和C++进行开发的时候,申请堆区内存是必不可少的,但是很多时候,我们经常忘记释放他导致内存泄漏,从而导致程序崩溃,又或者在尚未使用完成的时候释放,从而导致出现野指针,都是非常危险的现象,所以我们在C++11的标准中提出了智能指针的概念,他就是一种可以帮我们自动释放内存的存在共享智能指针 - shared_ptr他是使用最多的智能指针,它可以让多个指针指向同一片内存,同时在这片内存指向变为0的时候,他就会被释放他有三种构造方式//直接构造shared_ptr<int>p原创 2021-02-23 20:33:15 · 237 阅读 · 0 评论 -
构造函数和析构函数
构造函数构造函数在c++中可以定义一个与类同名的特殊成员函数,这种函数叫做构造函数构造函数可以有参数没有任何的返回值调用一般情况下为定义类的时候自动调用在一些情况下需要手动调用若你没有提供构造函数,c++编译器会提供一个默认的构造函数调用顺序他的调用和你的初始化列表无关,而是与你定义的先后有关系作用:完成对对象的初始化作用构造函数的手动调用(以下面的例子为例)1.括号法stu a(1,3) //它可以根据重载来判断调用哪个函数2.直接调用构造函数 手动的调用构造函数原创 2020-07-01 21:51:33 · 111 阅读 · 0 评论 -
多态原理探究
概念当类中声明虚函数时,编译器会在类中生成一个虚函数表虚函数表是一个存储类成员函数指针的数据结构虚函数表是由编译器自动生成与维护的virtual成员函数会被编译器放入虚函数表中当存在虚函数时,每个对象中都有一个指向虚函数表的指针(C++编译器给父类对象、子类对象提前布局vptr指针;当进行howToPrint(Parent *base)函数是,C++编译器不需要区分子类对象或者父类对象,只需要再base指针中,找vptr指针即可。)VPTR一般作为类对象的第一个成员实现原理C++中多态原创 2020-07-01 12:57:22 · 152 阅读 · 0 评论 -
纯虚函数和抽象类
前言在Java等语言中,都有对接口类的定义,而在C++中,就有抽象类可以代替他的接口类,所以抽象类是不完整的,在面向对象的编程中,他往往是用来做类型隐藏和充当全局变量的角色定义纯虚函数是一个在基类中说明的虚函数,在基类中没有定义,要求任何派生类都定义自己的版本纯虚函数为各派生类提供一个公共的界面(接口封装和设计,软件模块功能的划分)形式 virtual 类型 函数名 (参数表)=0;一个具有纯虚函数的基类称为抽象类注:抽象类不能建立对象,只能声明抽象类指针抽象类不能作为返回类型抽象原创 2020-06-30 10:52:31 · 233 阅读 · 1 评论 -
重载与重写的再理解
函数重载必须要在一个类中进行子类无法重载父类的函数,父类同名函数将被名称覆盖重载是在编译期间根据参数类型和个数决定函数调用函数重写必须是发生在子类和父类之间的子类与父类必须有相同的函数原型使用virtual使多态(如果不使用virtual是重定义)代码测试class father{ public: void func () { cout<<"xixi"<<endl; } void func (int a,int b,int c原创 2020-06-27 18:33:21 · 101 阅读 · 0 评论 -
改写对象的行为—多态
前言多态(Polymorphism)按字面的意思就是“多种状态”。在面向对象语言中,接口的多种不同的实现方式即为多态。引用Charlie Calverts对多态的描述——多态性是允许你将父对象设置成为一个或更多的他的子对象相等的技术,赋值之后,父对象就可以根据当前赋值给它的子对象的特性以不同的方式运作(摘自“Delphi4 编程技术内幕”)。简单的说,就是一句话:允许将子类类型的指针赋值给父类类型的指针。多态多态作为c++语言中最重要的一环,他的地位相当于c语言中的指针,他是面向对象编程的核心,他是一原创 2020-06-27 16:16:28 · 164 阅读 · 0 评论 -
继承中同名函数的处理和static的处理方法
同名函数的处理方法1、当子类成员变量与父类成员变量同名时,子类依然从父类继承同名成员2、在子类中通过作用域分辨符::进行同名成员区分(在派生类中使用基类的同名成员,显式地使用类名限定符)3、同名成员存储在内存中的不同位置注如果没有说明的情况,默认会使用子类的同名函数或者变量static的情况基类定义的静态成员,将被所有派生类共享根据静态成员自身的访问特性和派生类的继承方式,在类层次体系中具有不同的访问性质 (遵守派生类的访问控制)派生类中访问静态成员,用以下形式显式说明:类名 :: 成原创 2020-06-26 17:57:54 · 619 阅读 · 0 评论 -
继承中析构和构造的调用原则
继承与组合混搭情况下,构造和析构调用原则先说结论原则: 先构造父类,再构造成员变量、最后构造自己先析构自己,在析构成员变量、最后析构父类注先构造的对象,后释放class my //创建一个成员类{public: int a; my (int a=0) { this ->a=a; cout<<"my running"<<endl; } ~my() { cout<<"my end"<<endl; }};clas原创 2020-06-25 21:02:00 · 234 阅读 · 0 评论 -
C++中的继承
前言面向对象程序设计有4个主要特点:抽象、封装、继承和多态性。我们已经讲解了类和对象,了解了面向对象程序设计的两个重要特征一数据抽象与封装,已经能够设计出基于对象的程序,这是面向对象程序设计的基础。要较好地进行面向对象程序设计,还必须了解面向对象程序设计另外两个重要特 征——继承性和多态性。本章主要介绍有关继承的知识,多态性将在后续章节中讲解。继承性是面向对象程序设计最重要的特征,可以说,如果没有掌握继承性,就等于没有掌握类和对象的精华,就是没有掌握面向对象程序设计的真谛。类之间的关系has-A,原创 2020-06-23 20:07:48 · 135 阅读 · 0 评论 -
C++运算符的重载
前言运算符重载是编译器提供给用户自定义的一种更方便的工作方式定义其实就是重新定义一些运算符的意思的,比如是让加法可以在类之间进行,当然我们要使用到关键字operator,话不多说,直接上代码class Stu{public: friend Stu operator+ (Stu &a,Stu &b); Stu (int a=0,int b=0) { this ->a =a; this ->b =b; } void prt() { cout<原创 2020-06-21 17:05:08 · 99 阅读 · 0 评论 -
C++中的友元分析
友元函数class stu{public: friend int ret (stu my); stu (int a=10) { this ->a =a; }private: int a; int b;};int ret (stu my){ return my.a;}int main(int argc, char *argv[]){ stu my; cout<<"a= "<<ret (my)<<endl; return原创 2020-06-19 18:59:50 · 96 阅读 · 0 评论 -
静态成员变量和静态成员函数
静态成员变量static 在类中使用的时候,大家可以共享他的数据,就是无论创建多少个对象,都是共享一个静态成员,举个例子class stu{ static int c; public: void put (int a) { c=a; } void get () { cout <<"c="<<c<<endl; } void plus() { c+=2; }};int stu::c=0; //静态成员的初始化int main(i原创 2020-06-16 21:40:39 · 139 阅读 · 0 评论 -
类的封装和访问控制
前言类是面向对象最基本的特性,把数据和函数化成一个主体,封装就是把客观事物封装成类,然后可以信任的数据去操作他们类类就是类似于c语言中的结构体,但是他比c语言的结构体有着更强大的功能,那他的内部可以定义函数,基本形式是这样的class func{public: int a; int b;public: void add { return a+b; }protected;private;}封装封装有两层含义:把属性和方法进行封装对属性和方法进行访问控制类的内部原创 2020-05-31 19:12:30 · 259 阅读 · 0 评论 -
c++对函数的扩展
前言c++对函数审升级很大的提高了效率,提供了方便内敛函数定义:inline 变量类型 函数名 (形参)inline void func (void) //必须和函数体的实现写到一块{ cout<<"hellow world"<<endl;}原理: 有一点像宏替换,c++编译器直接将函数体插入到需要调用的地方他没有普通函数的压栈,跳转,返回,所以效率要高很多但是 编译器可能会拒绝你的内敛请求,但是现在大多数c++可以通过宏来强制内敛限制:不能有循环结构,过多原创 2020-05-28 22:48:30 · 250 阅读 · 1 评论 -
新的类型转化
前言在原来的c语言中,强制的类型转换他有很多问题,他过于粗暴,有很多转换根本就不合理,从而导致很多错误,但是c++在他的上面很难优化,所以就提出了一种新的类型转换,将类型转化分类,从而更大的降低他的出错率static_cast基于基本类型的转换不能用于基本类型见指针的转换用于有继承关系类对象之间的转换和类指针之间的转换const_cast用于去除变量的只读属性强制转换的目标类型必须是指针或者引用reinterpret_cast用于指针间的转换用于整数和指针类型见的强制转换原创 2020-05-17 20:05:49 · 118 阅读 · 0 评论 -
c++中的新成员——new,命名空间
c++中的动态内存分配优点:使用更加的方便,解决了c中有很时候没有库文件时不能申请堆内存的情况使用c++中是通过new关键字来进行内存空间的申请的c++中动态内存是基于类型进行的delete关键字用于释放new在申请的时候可以进行初始化(malloc不具备)int *p =new int(10); //申请并初始化位10int *pa =new int [10];//申请一个数组delete p;delete []p; //销毁的时候要注意注 在申请空间的时候,因为他是动态内存原创 2020-05-17 15:12:08 · 318 阅读 · 0 评论 -
重载的分析
前言在c++中,出现重载的概念,其实就是一个高级语言的象征,他的出现就是机器语言更加的自然化,他其实可以理解位我们自然语言中的动词,它可以和不同的名词起到不同的功能重载定义:用一个相同的函数名来定义不同的函数重载的条件:参数的个数不同参数的类型不同参数的顺序不同注与函数的返回值没有关系但是在c++中,因为有默认参数的存在,所以有时候会产生二义性,就比如下面这个程序,编译会报错int func (int a,int b,int c=0){ return a+b+c;}int fun原创 2020-05-17 14:03:10 · 136 阅读 · 0 评论 -
引用的本质
变量名定义:变量名是对一段空间的别名,用户可以使用变量名来使用某一段空间所以一个空间可以有多个变量名来使用这个空间定义引用引入了对象的一个同义词。定义引用的表示方法与定义指针相似,只是用&代替了*。引用(reference)是c++对c语言的重要扩充。引用就是某一变量(目标)的一个别名,对引用的操作与对变量直接操作完全一样。其格式为:类型 &引用变量名 = 已定义过的变量名。由于C++是一个强类型的语言,所以在引用的时候必须初始化,不然编译器就会报错同时引用只能定义一次,不能转原创 2020-05-12 12:02:12 · 461 阅读 · 0 评论 -
C到C++的升级
前言C到C++的升级,是一次很有利的升级,他从一个面向过程的语言走向了一个面向对象的语言,他是对C很多的优化,解决了C中存在的许多不合适的地方,他的两个加号,一个是增加了新的类型,一个是增加了面向对象,他是对效率的一种提升,C当时的设计主要是面向过程,所以他很适合来写操作系统。我们使用不同的语言来做他擅长的事情,这样就大大减少了代码的可移植性,降低了维护的代价同样的,C++还对C完全的兼容...原创 2020-04-09 15:09:11 · 216 阅读 · 0 评论