4月13日知识梳理:森林和树。类的相关知识。

Posted on 2023-04-13 22:15  玄灵镜  阅读(53)  评论(0)    收藏  举报

1.将树转化为二叉树:将树的所有兄弟节点链接,然后去掉每个节点的出第一个孩子外所有的孩子,整理得到一个二叉树.这样得到的是二叉树有一个特点就是每棵树的根节点只有一个孩子.

2.将森林转化为二叉树:将森林中所有的树都按照上述方法转化成二叉树,然后因为每个二叉树的根节点都只有一个孩子,可以将一颗二叉树的根节点连接在另一颗二叉树根节点的另一个孩子上,当森林中所有二叉树都连接后就得到了一颗大的二叉树.

树的遍历不存在中序遍历,树的先序遍历对应二叉树的先序遍历和森林的先序遍历,树的后序遍历相当于二叉树的中序遍历与森林的中序遍历.

在类的实例化中,其中的成员变量参与他大小的计算而函数不参与他大小的计算,可以认为同一个类的不同的实例化对象调用的是同一个函数,空类的字节大小为一因为它起到了一个占位作用,linux下this指针存于栈中.而vs经常将this指针存放于寄存器中.

在累的初始化中:像这样直接给类赋值的做法中存在隐式转换,他先将数据拷贝构造给一个临时变量,然后这个临时变量进行对a的拷贝构造,而将整形变量作为一个浮点数的引用时,常常需要给引用加上const修饰,因为他其中也有一个隐式转换,先将整形赋给一个浮点类型的临时变量,因为这个临时变量具有常性所以需要给浮点型引用加上左值修正,

如果类的成员变量声明中有static,那这个成员变量存在于静态区,他只是服从类的管理而不参与类的大小计算,且再类外用类名对这个变量初始化,且在类外也可以用类名直接调用经static修饰的成员函数,

有一点需要注意的是静态成员函数他没有this指针所以最好还是只操作静态成员变量。

malloc和free单纯的释放空间和开辟空间失败返回空,operator 作用开辟空间失败报异常,new delete作用:开辟空间失败报异常,且再开辟空间时调用它的构造函数,释放空间时调用它的析构函数。

类的模板特化,他分全特化和偏特化,全特化将所有的模板参数显示化,偏特化将多个模板参数中的一个参数显示化,可根据当时情况考虑使用前者还是后者,特化时将需要特化的类型声明在特化语句类名的后面。

模板编译有一个缺点,他不可以分离编译,通常要将模板声明与使用函数写在同一个文件下,因为模板函数没有真实的函数体,当他在编译器实现链接的时候找不到函数的指针从而出错,解决办法显示调用模板函数,或者就是将模板声明与函数使用写在同一个文件下,

模板有一个优点,就是减少了人写代码的长度,但是将代码长度交给了机器,以至于可能会出现编译时间过长。

 

 模板在上面声明了以后需要在下面进行显示实例化才可以分离编译

博客园  ©  2004-2025
浙公网安备 33010602011771号 浙ICP备2021040463号-3