摘要: C++支持多继承,由此引发错综复杂的命名冲突问题,这时需要虚继承的概念解决这些问题。在C++之后的Java不支持多继承,因此没有这些问题。 多继承是指从多个直接基类中产生派生类的方法,多继承的派生类继承了所有父类成员。多个基类相互交织产生了错综复杂的设计问题,命名冲突就是其中一个。以典型的菱形继承为 阅读全文
posted @ 2020-04-30 19:50 Conan-Peng 阅读(258) 评论(0) 推荐(0)
摘要: 静态数据成员 有时候需要为某个类的所有对象分配一个单一的存储空间。使用全局变量的缺点显而易见,它可以被任意修改,而且很容易发生名字冲突。我们希望的是把数据当成全局变量那样去存储,但又隐藏在类的内部,而且又与这个类相联系。这个其实可以用静态数据成员来实现。 类的静态数据成员拥有一块单独的存储区,不管该 阅读全文
posted @ 2020-04-30 04:52 Conan-Peng 阅读(925) 评论(0) 推荐(0)
摘要: 1.定义一个单例类,其构造函数是私有的, 2.使用类的私有静态指针变量指向类的唯一实例, 3.并用一个公有的静态方法来获取该实例。 单例模式的作用就是保证在整个应用程序的生命周期中的任何一个时刻,单例类的实例都只存在一个(也可以不存在)。 单例模式通过类本身来管理其唯一的实例,唯一的实例是类的一个普 阅读全文
posted @ 2020-04-30 04:13 Conan-Peng 阅读(130) 评论(0) 推荐(0)
摘要: & 在C中表示取地址符,在C++中表示引用 在声明一个引用变量时,必须将其初始化,并且不允许在函数执行期间再将其作为其他变量的引用。 那么引用和指针谁更安全,谁更高效呢? 首先我们要认识到,使用引用传递函数的参数时,在内存中并没有实参的副本,而是对实参直接操作。当使用传值调用时,需要给形参分配存储单 阅读全文
posted @ 2020-04-30 02:23 Conan-Peng 阅读(2487) 评论(0) 推荐(1)
摘要: # 从四行代码看右值引用1. 右值引用是C++11新增加的一个重要特性,它主要解决两个问题:1)临时对象非必要的昂贵的拷贝操作;2)在模板函数中如何按照参数的实际类型进行转发。2. 第一行代码:int i = getVar(); 这行代码使用getVar()函数产生一个整型值,实际上这行代码生成了两 阅读全文
posted @ 2020-04-30 01:43 Conan-Peng 阅读(603) 评论(0) 推荐(0)
摘要: B树: 1. B树中每个节点最多有m个孩子,称为m阶B树。 2. 根节点至少有两个孩子。 3. 所有的叶子节点都位于同一层。 B树的目的是让每一个索引块尽可能存储更多的信息。与平衡二叉查找树不同,B树主要是为优化大块数据的读写操作而设计的。普遍应用在数据库和文件系统。 B+树是B树的一种变体: 1. 阅读全文
posted @ 2020-04-30 01:22 Conan-Peng 阅读(222) 评论(0) 推荐(0)
摘要: 1. 为什么用红黑树实现? map, set底层都提供了排序功能,红黑树形式存储的键值是有序的。同时红黑树可以在O(log n)时间内做插入,查找和删除。 2. 红黑树的性质 红黑树是每个节点都带有颜色属性的二叉搜索树,颜色要么是红色,要么是黑色。 性质1:红黑树的每个节点要么是红色,要么是黑色。 阅读全文
posted @ 2020-04-30 00:24 Conan-Peng 阅读(9238) 评论(0) 推荐(1)