零碎的编程细节笔记

  • C++中内部类和友元类功能类似。只是使用内部类时需要在类名前加 外部类名:: ,并且它可以不加类名的访问外部类中的static、枚举成员。其他的和友元类一样。

 

  • 应该尽可能晚的定义新变量,直到非得使用它且可以给他初始实参为止,这样可以避免无意义的构造行为等。

 

  • C++新标准中规定可以用using来定义类型别名,如using temp=char*,temp即为char*的别名。另外,不能把类型别名替换为原来的样子来理解语句,如const temp str和const char*str,前者是一个指向char的常量指针,后者是一个指向const char的指针。

 

  • 在C++中若想获取某一对象的类型,可以用typeid(对象名).name() 语句获得。

 

  • C++中多态分2种。编译时多态,通过重载实现。运行时多态,通过虚函数实现。而c++中的纯虚方法等同于c#中的抽象方法,虚基类等同于c#中的接口。

 

  • 在定义子类时首先考虑的应该是给父类数据成员赋值和重写抽象(纯虚)函数。

 

  • C#中,在使用委托来避免函数间代码重用时,通常对函数间不同的地方使用lambda(或创作符合委托类型的函数)

 

  • C++中,struct更适合看成是一个数据结构的实现体,class更适合看成是一个对象的实现体。他们的默认访问权限不同。

 

  • C++中,虚拟函数是为了对“如果你以一个基础类指针指向一个衍生类对象,那么通过该指针,你只能访问基础类定义的成员函数”这条规则反其道而行之的设计。而通过指针访问子类的函数正是运行时多态的表现。大多数设计模式都是以此为基础设计的。

 

  • C#中,ref和out参数的效果一样,都是通过关键字找到定义在主函数里面的变量的内存地址,并通过方法体内的语法改变它的大小。不同点是输出参数必须对参数进行初始化。ref必须初始化,out 参数必须在函数里赋值。ref参数是引用,out参数为输出参数

 

  • 如果程序中不存在一个稳定点或是不存在一个变化点,则使用设计模式就没有意义,所有设计模式的目的都是把变化和稳定隔离,从而管理变化。

 

 

  • C++中在构造函数中不能调用子类重写后的虚函数。因为在子类构造函数执行之前会调用父类的构造函数,此时子类还没构造,虚函数没有得到重写,不符合逻辑。而在C#或Java中可以,因为这些语言在此处是用动态绑定实现的。

 

  • 装饰者模式和桥模式看起来类似,模板方法和创建者模式看起来类似。区别在于装饰者模式和模板方法采用继承的方式,桥模式和创建者模式采用组合的方式,个人认为后者更加灵活和稳定。

 

  • 在C++中使用单例模式时,以下这种双锁机制实现是有问题的,因为编译器在new一个堆对象时会进行reorder,导致多线程调用该函数时可能得到非正常状态的对象。

      

 

  • 组件模式、游戏循环模式、更新模式是游戏引擎三大核心模式。

 

  • Unity引擎中采用基于组件的对象模型(组件模式),即万物皆Component,每一个Component都是一个实例化对象。而GameObject仅仅作为Component的容器存在。Transform是一个特殊的Component,它可以将GameObject链接成一个树状结构(子物体和父物体),同时也可以通过Transform获取其GameObject容器的引用。用户编写的脚本如果继承MonoBehaviour,则也继承Component,成为一个组件。MonoBehaviour中使用了更新模式,在引擎内部的游戏循环中(游戏循环模式),会遍历所有继承了MonoBehaviour 的类的对象,调用其重写后的Start、Update等方法(按一定顺序,详见https://docs.unity3d.com/Manual/ExecutionOrder.html),从而对其他组件进行调控并实现业务逻辑。另外,Unity中的拖拽功能都是GameObject级的。

 

 

 

此篇博客持续保持更新

 

 

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值