08 2018 档案
摘要:c/c++ 模板与STL小例子系列 模板类与友元函数 比如某个类是个模板类D,有个需求是需要重载D的operator实现这样的友元需要3个必要步骤 1,在模板类D的实现代码的上面声明友元函数 2,在模板类D的实现代码里面声明它是我的友元 3,实现友元函数 c++ include using name
阅读全文
摘要:c/c++ 模板与STL小例子系列 自建Array数组 自建的Array数组,提供如下对外接口 | 方法 | 功能描述 | | | | | Array() | 无参数构造方法,构造元素个数为模板参数个的数组 | | Array(int length) | 有参数构造方法,构造元素个数为参数lengt
阅读全文
摘要:多态的实现原理分析 当类里有一个函数被声明成虚函数后,创建这个类的对象的时候,就会自动加入一个__vfptr的指针, __vfptr维护虚函数列表。如果有三个虚函数,则__vfptr指向的是第一个虚函数, __vfptr+1指向的是第二个虚函数,__vfptr+2指向的是第三个虚函数。 当子类覆盖了
阅读全文
摘要:多态 1.多态用途 为了代码可以简单的重复使用,添加一个功能时,接口不需要修改。
阅读全文
摘要:子类和父类的赋值兼容规则 1.同名隐藏(非常重要) 当子类的成员方法(show)和父类的成员方法(show)的名字相同的时候,父类的所有(show)方法,都不能用子类的对象来调用了,这种现象就是同名隐藏。 3. 虚函数 当用子类的对象/指针/引用去赋值给父类时,如果子类和父类都有同名方法show,当
阅读全文
摘要:重载new,delete运算符 new,delete在c++中也被归为运算符,所以可以重载它们。 new的行为: 先开辟内存空间 再调用类的构造函数 开辟内存空间的部分,可以被重载。 delete的行为: 先调用类的析构函数 再释放内存空间 释放内存空间的部分,可以被重载。 为什么要要重载它们? 有
阅读全文
摘要:new delete初探 1,new有2个作用 开辟内存空间。 调用构造函数。 2,delete也有2个作用 释放内存空间 调用析构函数。 如果用new开辟一个类的对象的数组,这个类里必须有默认(没有参数的构造函数,或者有默认值的参数的构造函数)的构造函数。 释放数组时,必须加[]。delete [
阅读全文
摘要:类模板 1,模板类里的函数都是模板函数 2,模板类里的函数,在类外面实现的时候,要用模板函数(方法:push_back)的方式实现,在类内部实现时,不需要用模板函数(方法:show)方式实现。 3,用模板类实现单链表,类List是类ListNode的友元类;用友元函数重载了类Value的 using
阅读全文
摘要:函数模板初探 1,由来:有时候,函数的逻辑是一样的,只是参数的类型不同,比如下面 2,解决办法,如果参数的类型也可以作为函数的参数,就可以解决了 3,函数模板写法:template\ 4,函数模板的效率不高,编译器在编译的时候,会根据调用测提供的参数去推导出T1等的类型,并给我们生成对应类型的方法。
阅读全文
摘要:const this指针 方法列表后面的const是什么含义呢? 答案:不可以在方法里修改成员变量 注意点: 非const方法里调用const方法是可以的 const方法里调用const方法是可以的 const方法里调用非const方法是 不可以的。 原因: this指针。 因为非const方法里的
阅读全文
摘要:static关键字 1,static 成员变量 static 成员变量不随着对象的创建而开辟内存空间。也就是说,不管从哪个对象去看static成员变量,都是一样的。 2, static 成员方法 static 成员方法里不可以调用非static 成员方法。 非static 成员方法里可以调用stat
阅读全文
摘要:友元的简单应用 1,对象 + 对象,或者,对象 + 数字,可以用类的成员函数去重载+号函数,但是,数字 + 对象就不能用类的成员函数去重载+号函数了, 因为编译器会把数字 + 对象翻译成数字.operator+(const 类 &对象),因为数字不是类的对象,无法传递给类的成员函数this指针。 用
阅读全文
摘要:友元基本概念: 1,把一个一般函数声明为一个类的友元函数 2,把一个类A的某几个成员函数声明为某个类B的友元函数 3,把一个类A声明为一个类B的友元类。 友元的作用:可以访问类B里所有的成员变量和成员方法,不管是public,protected,还是private。 1,把一个一般函数show声明为
阅读全文
摘要:c/c++ 重载运算符的思考 c++ include using namespace std; class Imaginary{ public: Imaginary():real(0), imag(0){ cout 分析:执行m3 = m1 + m2的时点,因为m3的空间已经创建过了,所以 立即 释
阅读全文
摘要:解决上一篇 "浅拷贝" 的问题 浅拷贝的问题根源是,类里有指针类型的成员变量,所以需要自己编写拷贝构造函数和重载=函数
阅读全文
摘要:c/c++ 浅拷贝 编译器合成的 拷贝构造函数 和 =重载函数 ,只是做如下处理: 如果成员变量a是指针,执行完 拷贝构造函数 或者 =重载函数 后,对象1和对象2的成员变量就指向了一个地址了,所以当改变对象1的a的值,对象2的a的值也变化了, 而且,如果在析构函数里写了free(a)的话,就相当于
阅读全文
摘要:c/c++ 编译器提供的默认6个函数 1,构造函数 2,拷贝构造函数 3,析构函数 4,=重载函数 5,&重载函数 6,const&重载函数 c++ include using namespace std; class Test{ public: Test(int d = 0):data(d){ c
阅读全文
摘要:c/c++赋值函数(重载=号运算符) 首先c++里的各种运算符都是用函数实现的,比如=,就等号函数。 所以当用=给一个对象赋值的时候,实际调用的是=号所对应的=号函数。 分析下面的代码 c++ include using namespace std; class Test{ public: Test
阅读全文
摘要:c/c++拷贝构造函数和关键字explicit 关键字explicit 修饰构造方法的关键字,加上了,就告诉编译器,不可以隐式初始化对象;不加就可以隐式初始化对象; 下面的代码是可以正常编译执行的,但是加了关键字explicit,编译就会错我,因为Test t = 100;是隐式初始化对象,但是如果
阅读全文
摘要:c/c++ 类成员变量,成员函数的存储方式,以及this指针在c++中的作用 c++不会像上图那样为每一个对象的成员变量和成员函数开辟内存空间, 而是像下图那样,只为每一个对象的成员变量开辟空间。成员函数的只开辟一个共用的空间,所有对象的都可以访问这个公共的空间。 但是就产生了一个问题,当某一个对象
阅读全文
摘要:const 在星号的右边:不可以改指针的指向,可以用指针改里面的值 const在星号的左边:可以改指针的指向,不可以用指针改里面的值 const在星号的两边都有:既不可以改指针的指向,也不可以用指针改里面的值
阅读全文
摘要:c/c++ 哈希表 hashtable 概念:用key去查找value 实现hash函数有很多方法,本文用除留余数法。 除留余数法的概念: 取一个固定的基数的余数,注意不能用偶数,用偶数的话,分布会不均匀 发生冲突时,用链地址法解决 图形入图: "完整代码"
阅读全文
摘要:平衡二叉树(Balanced Binary Tree 或 Height Balanced Tree)又称AVL树 (a)和(b)都是排序二叉树,但是查找(b)的93节点就需要查找6次,查找(a)的93节点就需要查找3次,所以(b)的效率不高。 平衡二叉树(Balanced Binary Tree 或
阅读全文
摘要:c/c++ 二叉排序树 概念: 左树的所有节点的值(包括子节点)必须小于中心节点,右树所有节点的值(包括子节点)必须大于中心节点。 不允许有值相同的节点。 二叉排序树的特点: 中序遍历后,就是从小到大排序了。 根节点的最左边的值,就是树中最小的值。 根节点的最右边的值,就是树中最大的值。 创建二叉排
阅读全文
摘要:c/c++ 图的最短路径 Dijkstra(迪杰斯特拉)算法 图的最短路径的概念: 一位旅客要从城市A到城市B,他希望选择一条途中中转次数最少的路线。假设途中每一站都需要换车,则这个问题反映到图上就是要找一条从顶点A到B所含边的数量最少的路径。我们只需从顶点A出发对图作广度优先遍历,一旦遇到顶点B就
阅读全文
摘要:c/c++求解图的关键路径 critical path 上图表示一个工程,工程以V1为起始子工程,V9为终止子工程。 由图可以看出,要开工V5工程,必须在完成工程V2和V3后才可以。 完成V2需要a1(6)个小时,完成V3需要a2(4)个小时。假设V2和V3同时开工,V3就会提前2个小时完工,但是这
阅读全文
摘要:c/c++ 有向无环图 directed acycline graph 概念: 图中点与点之间的线是有方向的,图中不存在环。用邻接表的方式,实现的图。 名词: 顶点的入度:到这个顶点的线的数量。 顶点的出度:从这个顶点出发的线的数量。 实现思路: 1,计算出每个顶点的入度,存放到辅助数组cnt中 2
阅读全文
摘要:c/c++ 用克鲁斯卡尔(kruskal)算法构造最小生成树 最小生成树(Minimum Cost Spanning Tree)的概念: 假设要在n个城市之间建立公路,则连通n个城市只需要n 1条线路。这时,自然会考虑,如何在最节省经费的前提下建立这个公路网络。 每2个城市之间都可以设置一条公路,相
阅读全文
摘要:c/c++ 用普利姆(prim)算法构造最小生成树 最小生成树(Minimum Cost Spanning Tree)的概念: 假设要在n个城市之间建立公路,则连通n个城市只需要n 1条线路。这时,自然会考虑,如何在最节省经费的前提下建立这个公路网络。 每2个城市之间都可以设置一条公路,相应
阅读全文