c++
夏夕阳
这个作者很懒,什么都没留下…
展开
-
菱形继承和菱形虚继承
继承是C++的一大特点,我们通过菱形继承和菱形虚继承对继承进行进一步的分析。【菱形继承】创建一个基类A让B1和B2公有继承于它,让C公有继承B1和B2。class A{public : A() :a(1) { cout << "A()" << endl; } ~A() { cout << "~A原创 2017-04-08 09:05:03 · 1109 阅读 · 0 评论 -
AVL树的实现
AVL树:AVL树也成为平衡二叉树,它是这样定义的:一棵AVL树或者是空树,或者是具有以下性质的二叉搜索树:1、它的左右子树都是AVL树2、左子树和右子树高度之差(简称平衡因子)的绝对值不超过1(-1、0、1)AVL树的插入:在插入节点后会造成父节点的平衡因子发生改变,需要从下往上更新平衡因子,若某一节点的平衡因子的绝对值大于1,说明以这个结点为根的树已经不原创 2017-05-24 00:49:02 · 480 阅读 · 0 评论 -
二叉树前序遍历
递归版本:void _PreOrderR(Node* pRoot) { if (NULL == pRoot)//出口 return; cout data << " ";//对节点进行访问 _PreOrderR(pRoot->LC);//访问左子树 _PreOrderR(pRoot->RC);//访问右子树 }非递归版本:基本思想,先对结点进行访问,在原创 2017-05-12 15:30:22 · 304 阅读 · 0 评论 -
二叉树中序遍历
递归版本:void _InOrderR(Node* pRoot) { if (NULL == pRoot)//出口 return; _InOrderR(pRoot->LC);//访问左子树 cout data << " ";//访问结点 _InOrderR(pRoot->RC);//访问右子树 }非递归版本:void _InOrderNor(Node* pRo原创 2017-05-12 15:47:15 · 410 阅读 · 0 评论 -
递归形式二分查找
在进行二分查找时,最需要注意的有以下几点:原创 2017-04-14 22:09:44 · 472 阅读 · 0 评论 -
关于scoped_ptr和scoped_array
scoped_ptr是Boost库中的一个只能指针,它和auto_ptr非常类似,可以完成资源的自动释放。scoped_ptr与auto_ptr的区别在于,auto_ptr可以实现资源的转移,但是scoped_ptr禁止了资源的转移,它让一个对象拥有了对资源的彻底掌控。下面代码模拟实现了scoped_ptr:template class ScopedPtr{public: S原创 2017-04-05 16:11:12 · 741 阅读 · 0 评论 -
关于auto_ptr
在C++中因为没有自动内存回收,自己开辟的空间总是要自己去维护 ,必须保证在出作用域或者程序运行完成退出之前释放掉自己申请的空间,否则就会造成内存原创 2017-04-05 15:22:57 · 439 阅读 · 0 评论 -
C++this指针分析
1.什么是this指针 this指针是隐含定义在成员函数中的参数,类的非静态成员函数访问非静态成员时,编译器会将对象本身的地址传给函数作为隐含参数。this指针就是当前对象的地址,对各成员的访问是通过this 指针进行的。2.this指针的特性 this指针是 类类型* const this this指针不是对象的一部分,不影响sizeof()的结果 this指针的作用域原创 2017-02-18 22:45:47 · 503 阅读 · 0 评论 -
带有虚函数的菱形继承和带有虚函数的菱形虚继承
对于某些函数来说,基类希望它的派生类定义适合自身的版本,此时基类就将这些函数声明为虚函数。在存在虚函的类,创建对象时会产生虚表指针,虚表指针指向一个虚表,这时就可以通过虚表访问自己定义的函数。通过下面两种继承进行分析:【带有虚函数的菱形继承】以下图的模型为例进行分析:class A{public : A() :a(1) {}原创 2017-04-12 19:10:11 · 2472 阅读 · 2 评论 -
C++继承浅析
继承 :继承是面向对象程序设计使代码可以复用的重要手段,允许在保持原有类特性的基础上进行扩展,增加功能。继承定义格式:继承关系&访问限定符三种类成员访问限定符(public 公有的,protected 保护的,private 私有的)三中继承关系 (public 公有继承,protected 保护继承,private 私有继承 )继承方式原创 2017-02-27 16:21:58 · 679 阅读 · 0 评论 -
浅拷贝、深拷贝、引用计数法、写时拷贝,循序渐进的分析
浅拷贝:class String{public: String(const char *pStr = "") :_pStr(new char[strlen(pStr) + 1]) { strcpy(_pStr, pStr); } ~String() { delete[] _pStr; _原创 2017-02-28 23:29:28 · 505 阅读 · 0 评论 -
c++多态浅析
C++的三大特点,封装、继承和多态。封装可以使代码模块化,继承可以扩展以前的代码,他们的目的都实现了代码重用,而多态呢,它其实是为了实现接口的重用!对于不同的对象,函数能够通过同一个接口使他们找到自己各自的实现方法,已完成他们所需要完成的不同任务 。多态的分类:静态多态:编译器在编译期间完成,编译器根据函数实参的类型,推断出要调用那个函数,有对应的函数就调用它,否则编译出错。原创 2017-03-04 20:18:17 · 458 阅读 · 0 评论 -
C++模板
泛型编程:编写与类型无关的逻辑代码,是一种代码复用的手段,模板是泛型编程的基础。模板分为函数模板和类模板。【函数模板】代表一个函数家族,该函数与类型无关,在使用时被参数化,根据参数的类型产生特定类型的函数。模板函数的格式:templatetypename T1,typename T2, typename T3, ......>返回值类型 函数原创 2017-03-12 16:57:20 · 360 阅读 · 1 评论 -
二叉树后序遍历
递归版本:void _PostOrderR(Node* pRoot) { //递归出口 if (NULL == pRoot) return; //遍历左子树 _PostOrderR(pRoot->LC); //遍历右子树 _PostOrderR(pRoot->RC); cout data << " "; }非递归版本:void _PostOrd原创 2017-05-06 00:37:33 · 380 阅读 · 0 评论