代码改变世界

随笔分类 - C++

C++设计模式:Template Method

2017-03-11 17:03 by melonstreet, 939 阅读, 收藏, 编辑
摘要:我使用过一个简单的后台服务框架.这个框架上手很容易,我只需要继承一个基类,同时实现,或重写(override)基类声明的几个接口(这些接口声明为虚函数,或者纯虚函数),然后调用基类定义好的run()函数,便可以将框架代码运行起来.run函数做的事情,是依序调用上述的几个接口: 其中收包,解包,回包, 阅读全文

漫谈C++:良好的编程习惯与编程要点

2016-05-22 20:30 by melonstreet, 5723 阅读, 收藏, 编辑
摘要:以良好的方式编写C++ class 假设现在我们要实现一个复数类complex,在类的实现过程中探索良好的编程习惯。 ① Header(头文件)中的防卫式声明 防止头文件的内容被多次包含。 ② 把数据放在private声明下,提供接口访问数据 ③ 不会改变类属性(数据成员)的成员函数,全部加上con 阅读全文

C++11 并发编程基础(一):并发、并行与C++多线程

2016-02-12 22:54 by melonstreet, 808 阅读, 收藏, 编辑
摘要:C++11标准在标准库中为多线程提供了组件,这意味着使用C++编写与平台无关的多线程程序成为可能,而C++程序的可移植性也得到了有力的保证。另外,并发编程可提高应用的性能,这对对性能锱铢必较的C++程序员来说是值得关注的。 1. 何为并发 并发 指的是两个或多个独立的活动在 同一时段 内发生。生活中 阅读全文

数据结构图文解析之:哈夫曼树与哈夫曼编码详解及C++模板实现

2016-02-11 15:32 by melonstreet, 11247 阅读, 收藏, 编辑
摘要:0. 数据结构图文解析系列 |数据结构系列文章| |: | | "数据结构图文解析之:数组、单链表、双链表介绍及C++模板实现" | | "数据结构图文解析之:栈的简介及C++模板实现" | | "数据结构图文解析之:队列详解与C++模板实现" | | "数据结构图文解析之:树的简介及二叉排序树C+ 阅读全文

数据结构图文解析之:二叉堆详解及C++模板实现

2016-02-05 22:59 by melonstreet, 3815 阅读, 收藏, 编辑
摘要:0. 数据结构图文解析系列 |数据结构系列文章| |: | | "数据结构图文解析之:数组、单链表、双链表介绍及C++模板实现" | | "数据结构图文解析之:栈的简介及C++模板实现" | | "数据结构图文解析之:队列详解与C++模板实现" | | "数据结构图文解析之:树的简介及二叉排序树C+ 阅读全文

数据结构图文解析之:树的简介及二叉排序树C++模板实现.

2016-02-04 00:57 by melonstreet, 11729 阅读, 收藏, 编辑
摘要:0. 数据结构图文解析系列 |数据结构系列文章| |: | | "数据结构图文解析之:数组、单链表、双链表介绍及C++模板实现" | | "数据结构图文解析之:栈的简介及C++模板实现" | | "数据结构图文解析之:队列详解与C++模板实现" | | "数据结构图文解析之:树的简介及二叉排序树C+ 阅读全文

数据结构图文解析之:队列详解与C++模板实现

2016-02-03 08:38 by melonstreet, 11396 阅读, 收藏, 编辑
摘要:0. 数据结构图文解析系列 |数据结构系列文章| |: | | "数据结构图文解析之:数组、单链表、双链表介绍及C++模板实现" | | "数据结构图文解析之:栈的简介及C++模板实现" | | "数据结构图文解析之:队列详解与C++模板实现" | | "数据结构图文解析之:树的简介及二叉排序树C+ 阅读全文

数据结构图文解析之:栈的简介及C++模板实现

2016-02-02 07:42 by melonstreet, 20970 阅读, 收藏, 编辑
摘要:0. 数据结构图文解析系列 |数据结构系列文章| |: | | "数据结构图文解析之:数组、单链表、双链表介绍及C++模板实现" | | "数据结构图文解析之:栈的简介及C++模板实现" | | "数据结构图文解析之:队列详解与C++模板实现" | | "数据结构图文解析之:树的简介及二叉排序树C+ 阅读全文

数据结构图文解析之:数组、单链表、双链表介绍及C++模板实现

2016-02-01 08:01 by melonstreet, 10572 阅读, 收藏, 编辑
摘要:0. 数据结构图文解析系列 |数据结构系列文章| |: | | "数据结构图文解析之:数组、单链表、双链表介绍及C++模板实现" | | "数据结构图文解析之:栈的简介及C++模板实现" | | "数据结构图文解析之:队列详解与C++模板实现" | | "数据结构图文解析之:树的简介及二叉排序树C+ 阅读全文

C++ 顺序容器基础知识总结

2016-01-23 11:57 by melonstreet, 8170 阅读, 收藏, 编辑
摘要:0.前言 本文简单地总结了STL的顺序容器的知识点。文中并不涉及具体的实现技巧,对于细节的东西也没有提及。一来不同的标准库有着不同的实现,二来关于具体实现《STL源码剖析》已经展示得全面细致。所以本文仅仅是对容器基础知识的归纳。至于容器提供的接口与使用实例,建议查取官方文档。文章难免有错漏,希望指出 阅读全文

细说new与malloc的10点区别

2016-01-19 01:27 by melonstreet, 24261 阅读, 收藏, 编辑
摘要:前言 几个星期前去面试C++研发的实习岗位,面试官问了个问题: new与malloc有什么区别? 这是个老生常谈的问题。当时我回答new从自由存储区上分配内存,malloc从堆上分配内存;new/delete会调用构造函数/析构函数对对象进行初始化与销毁;operator new/delete可以进 阅读全文

C++ 异常机制分析

2016-01-17 11:19 by melonstreet, 14170 阅读, 收藏, 编辑
摘要:C++异常机制概述 异常处理是C++的一项语言机制,用于在程序中处理异常事件。异常事件在C++中表示为 异常对象 。异常事件发生时,程序使用throw关键字抛出异常表达式,抛出点称为异常出现点,由操作系统为程序设置当前异常对象,然后执行程序的当前异常处理代码块,在包含了异常出现点的最内层的 try 阅读全文

C++编译期多态与运行期多态

2016-01-15 11:23 by melonstreet, 12974 阅读, 收藏, 编辑
摘要:前言 今日的C++不再是个单纯的“带类的C”语言,它已经发展成为一个多种次语言所组成的语言集合,其中泛型编程与基于它的STL是C++发展中最为出彩的那部分。在面向对象C++编程中,多态是OO三大特性之一,这种多态称为运行期多态,也称为动态多态;在泛型编程中,多态基于template(模板)的具现化... 阅读全文

关于传值与传引用的讨论

2016-01-14 09:28 by melonstreet, 1802 阅读, 收藏, 编辑
摘要:效率问题 对于用户自定义的类型来说,传引用一般要比传值高效。传引用不需要经过对象过程,在《Effective C++》中作者举了个例子: 此刻我们拥有一个派生类对象derive 。对derive传值的结果是共需要进行六次的构造函数的调用:对象本身的构造函数,对象内部数据成员string的构造... 阅读全文

智能指针小分析

2016-01-13 22:45 by melonstreet, 1025 阅读, 收藏, 编辑
摘要:我们为什么需要智能指针 所谓资源就是,一旦用了它,将来必须还给系统。C++中内存资源的动态分配经由new与delete实现。问题在于,无论是有意无意,我们有时候总会忘记释放内存中的资源。例如delete语句出现在某个循环语句中,而我们的continue或者break却跳过了它的执行;或者是在程序中... 阅读全文

多态基类与虚析构函数

2016-01-13 01:21 by melonstreet, 935 阅读, 收藏, 编辑
摘要:假设我们有一个基类A,很不幸的,A的析构函数是一个non virtual。同时我们有一个派生类B,它派生自A。 我们定义了一个A类型指针,它指向的实际对象是B: 然后在程序的某处,我们不再需要B了,我们将指针ptr delete掉: 注意new永远要和delete成队出现,除非你使用智能指针... 阅读全文

统一初始化语法

2015-12-31 16:00 by melonstreet, 452 阅读, 收藏, 编辑
摘要:C++是个语法特别复杂的语言,在语法分析中时常会出现歧义,例如嵌套模板参数歧义问题: 在有的编译器上会被解析为vector< vector < int vec,也就是把 当成右移操作符了,不过C++11已经解决这个问题了。咋解决的呢,简单地说,编译器把对 的分析延迟到语法分析阶段(原来是在词法分析阶... 阅读全文

GC基本算法及C++GC机制

2015-12-27 11:04 by melonstreet, 5800 阅读, 收藏, 编辑
摘要:前言 垃圾收集器是一种动态存储分配器,它自动释放程序不再需要的已分配的块,这些块也称为 垃圾 。在程序员看来,垃圾就是不再被引用的对象。自动回收垃圾的过程则称为 垃圾收集(garbage collection) 。在一个支持垃圾收集的语言中,程序显式地申请内存,但从不需要显式的释放它们。垃圾收集器会 阅读全文

C++ 自由存储区是否等价于堆?

2015-12-20 15:20 by melonstreet, 16213 阅读, 收藏, 编辑
摘要:文章也发布在 "听风过境的专栏" “free store” VS “heap” 当我问你C++的内存布局时,你大概会回答: “在C++中,内存区分为5个区,分别是堆、栈、自由存储区、全局/静态存储区、常量存储区”。 如果我接着问你自由存储区与堆有什么区别,你或许这样回答: “malloc在堆上分配的 阅读全文

QT信号槽机制

2015-11-25 21:10 by melonstreet, 20600 阅读, 收藏, 编辑
摘要:信号槽 信号槽是QT中用于对象间通信的一种机制,也是QT的核心机制。在GUI编程中,我们经常需要在改变一个组件的同时,通知另一个组件做出响应。例如: 一开始我们的Find按钮是未激活的,用户输入要查找的内容后,查找按钮就被激活,这就是输入框与Find按钮这两个组件间通信的例子。 早... 阅读全文

C++11特性:decltype关键字

2015-11-10 14:52 by melonstreet, 36576 阅读, 收藏, 编辑
摘要:decltype简介 我们之前使用的typeid运算符来查询一个变量的类型,这种类型查询在运行时进行。RTTI机制为每一个类型产生一个type_info类型的数据,而typeid查询返回的变量相应type_info数据,通过name成员函数返回类型的名称。同时在C++11中typeid还提供了ha... 阅读全文

C++11特性:auto关键字

2015-11-09 21:29 by melonstreet, 57397 阅读, 收藏, 编辑
摘要:前言 本文的内容已经不新鲜了。关于auto,翻来覆去被人知道的都是这些东西,本文并没有提出新颖的auto用法。 本人原是痛恨博客一篇篇都是copy而来缺乏新意的探索,当然,本文不是copy而来,但发布这样一篇大家皆知的文章心里甚是惶恐。 本文对auto的内容加以整理,权当是自己的复习笔记了。 C++ 阅读全文

图说C++对象模型:对象内存布局详解

2015-10-25 20:28 by melonstreet, 34821 阅读, 收藏, 编辑
摘要:0.前言 文章较长,而且内容相对来说比较枯燥,希望对C++对象的内存布局、虚表指针、虚基类指针等有深入了解的朋友可以慢慢看。 本文的结论都在VS2013上得到验证。不同的编译器在内存布局的细节上可能有所不同。 文章如果有解释不清、解释不通或疏漏的地方,恳请指出。 1.何为C++对象模型? 引用《深度 阅读全文

【C++实现python字符串函数库】strip、lstrip、rstrip方法

2015-09-11 22:48 by melonstreet, 3805 阅读, 收藏, 编辑
摘要:【C++实现python字符串函数库】strip、lstrip、rstrip方法 这三个方法用于删除字符串首尾处指定的字符,默认删除空白符(包括'\n', '\r', '\t', ' ')。 s.strip(rm) 删除s字符串中开头、结尾处,位于 rm删除序列的字符 s.lstrip(r... 阅读全文

【C++实现python字符串函数库】二:字符串匹配函数startswith与endswith

2015-09-09 13:44 by melonstreet, 2366 阅读, 收藏, 编辑
摘要:【C++实现python字符串函数库】字符串匹配函数startswith与endswith 这两个函数用于匹配字符串的开头或末尾,判断是否包含另一个字符串,它们返回bool值。startswith()函数判断文本的指定范围字符段是否以某个字符开始,endswith()函数判断文本是否以某个字符结... 阅读全文

【C++实现python字符串函数库】一:分割函数:split、rsplit

2015-09-08 18:01 by melonstreet, 3505 阅读, 收藏, 编辑
摘要:【C++实现python字符串函数库】split()与rsplit()方法 前言 本系列文章将介绍python提供的字符串函数,并尝试使用C++来实现这些函数。这些C++函数在这里做单独的分析,最后我们将把这些函数放在命名空间中,真正作为一个函数库来使用。 本节内容 在本节,我们将实现两个... 阅读全文

C++ 引用计数技术及智能指针的简单实现

2015-09-01 23:05 by melonstreet, 14896 阅读, 收藏, 编辑
摘要:文章也发布在 "腾讯云+社区" 一直以来都对智能指针一知半解,看C++Primer中也讲的不够清晰明白(大概是我功力不够吧)。最近花了点时间认真看了智能指针,特地来写这篇文章。 1.智能指针是什么 简单来说,智能指针是一个类,它对普通指针进行封装,使智能指针类对象具有普通指针类型一样的操作。具体而言 阅读全文

编译器角度看C++复制构造函数

2015-08-09 19:44 by melonstreet, 1409 阅读, 收藏, 编辑
摘要:#[C++对象模型]复制构造函数的建构操作关于复制构造函数的简单介绍,可以看我以前写过的一篇文章[C++复制控制之复制构造函数](http://www.cnblogs.com/QG-whz/p/4485574.html "C++ 复制控制之复制构造函数")该文章中介绍了复制构造函数的定义、调用时机、... 阅读全文

C++ 合成默认构造函数的真相

2015-07-25 20:20 by melonstreet, 8093 阅读, 收藏, 编辑
摘要:对于C++默认构造函数,我曾经有两点误解:类如果没有定义任何的构造函数,那么编译器(一定会!)将为类定义一个合成的默认构造函数。合成默认构造函数会初始化类中所有的数据成员。 第一个误解来自于我学习C++的第一本书 《C++ Primer》,在书中392页:“只有当一个类没有定义构造函数时,编译... 阅读全文

C++内联函数

2015-07-12 20:29 by melonstreet, 20634 阅读, 收藏, 编辑
摘要:在C语言中,我们使用宏定义函数这种借助编译器的优化技术来减少程序的执行时间,那么在C++中有没有相同的技术或者更好的实现方法呢?答案是有的,那就是内联函数。内联函数作为编译器优化手段的一种技术,在降低运行时间上非常有用。我们将从:什么是内联函数为什么要使用内联函数内联函数优缺点分析何时使用内联函... 阅读全文

C++ 序列式容器之vector

2015-06-07 16:10 by melonstreet, 1855 阅读, 收藏, 编辑
摘要:什么是容器 容器,顾名思义,是用来容放东西的场所。C++容器容放某种数据结构,以利于对数据的搜寻或排序或其他特殊目的。众所周知,常用的数据结构不外乎:数组array, 链表list, 树tree, 栈stack, 队列queue, 散列表hash table, 集合set、映射表map等等。容... 阅读全文

二叉查找树 C++实现(含完整代码)

2015-05-28 22:20 by melonstreet, 9496 阅读, 收藏, 编辑
摘要:一般二叉树的查找是通过遍历整棵二叉树实现,效率较低。二叉查找树是一种特殊的二叉树,可以提高查找的效率。二叉查找树又称为二叉排序树或二叉搜索树。 二叉查找树的定义 二叉排序树(Binary Search Tree)又称二叉排序树(Binary Sort Tree),或者是一颗空二叉树,或者... 阅读全文

C++强制类型转换操作符 dynamic_cast

2015-05-20 20:52 by melonstreet, 4642 阅读, 收藏, 编辑
摘要:dynamic_cast是四个强制类型转换操作符中最特殊的一个,它支持运行时识别指针或引用。>>>>>>>>>>>编译器的RTTI设置>>>>>>>>>>>dynamic_cast提供RTTI(Run-Time Type Information),也就是运行时类型识别。它对编译器有要求,需要编译器启... 阅读全文

C++强制类型转换操作符 const_cast

2015-05-19 22:40 by melonstreet, 18883 阅读, 收藏, 编辑
摘要:const_cast也是一个强制类型转换操作符。《C++ Primer》中是这样描述它的:1.将转换掉表达式的const性质。2.只有使用const_cast才能将const性质性质转化掉。试图使用其他三种形式的强制转换都会导致编译时的错误。(添加const还可以用其他转换符,如static_con... 阅读全文

C++强制类型转换操作符 static_cast

2015-05-17 14:57 by melonstreet, 38104 阅读, 收藏, 编辑
摘要:static_cast是一个强制类型转换操作符。强制类型转换,也称为显式转换,C++中强制类型转换操作符有static_cast、dynamic_cast、const_cast、reinterpert_cast四个。本节介绍static_cast操作符。编译器隐式执行的任何类型转换都可以由stati... 阅读全文

C++ 复制控制之复制构造函数

2015-05-07 17:39 by melonstreet, 1752 阅读, 收藏, 编辑
摘要:7月26日更新: 过了这么长的时间回过头来看,发现文章中有几个点说错(用红字标出): 构造函数不是只有唯一一个参数,它也可以是多参数形式,其第二参数及后继以一个默认值供应。 不是没有声明复制控制函数时编译器就一定会帮类声明,需要满足一定的条件。《《=======================... 阅读全文

static关键字总结

2015-05-03 14:58 by melonstreet, 1060 阅读, 收藏, 编辑
摘要:static,即静态声明。它在 作用域、存储方式、生命周期 等各方面影响一个变量或函数。文章将从 局部变量、全局变量、普通函数、类的static成员(包括数据成员与成员函数)来总结static。全局变量 所有的全局变量,无论是否是static的,都是存储于静态存储区的。全局变量本身就是静态存... 阅读全文

C++ 隐式类类型转换

2015-05-02 21:47 by melonstreet, 14114 阅读, 收藏, 编辑
摘要:C++ 隐式类类型转换 阅读全文

浅谈malloc()与free()

2015-01-09 22:10 by melonstreet, 2021 阅读, 收藏, 编辑
摘要:malloc()与free()l 函数原型malloc函数的函数原型为:void* malloc(unsigned int size),它根据参数指定的尺寸来分配内存块,并且返回一个void型指针,指向新分配的内存块的初始位置。如果内存分配失败(内存不足),则函数返回NULL。l 关于返回值mall... 阅读全文