
C/C++
文章平均质量分 77
ljianhui
热爱编程,热爱学习IT技术
展开
-
C++泛型算法的小总结
泛型算法的一些总结1、每个泛型算法的实现都独立于单独的容器,并且不依赖于容器存储的元素类型。2、泛型算法从不直接添加或删除元素。3、与容器的类型无关,只在一点上隐式地依赖元素类型:必须能够对元素做比较运算。A、需要某种遍历集合的方式:能够从一个元素向前移到下一个元素。B、必须能够知道是否到达了集合的末尾。C、必须能够对容器中的每一个元素与被查找的元素进行比较。D、需要一个类原创 2012-07-10 11:30:43 · 2981 阅读 · 0 评论 -
Effective C++笔记2
1、了解C++默默编写并调用哪些函数*至于copy构造函数和copy assignment操作符,编译器创建的版本只是单纯地将来源对象的每一个non-static 成员变量拷贝到目标对象。注意,编译器产出的析构函数是个non-virtual。*如果你打算在一个"内含reference 成员"的 class 内支持赋值操作 (assignment) ,你必须自己定义 copy ass原创 2012-10-06 11:49:17 · 930 阅读 · 0 评论 -
protected与public真的不同吗?
在一开始接触C++的class时就接触到了三种访问权限,private、protected、public。对于它们的不同C++ Primer中如此描述:在public部分定义的成员可被使用该类型的所有代码访问;在private部分定义的成员可被其他(本)类成员访问;protected成员可以被派生类对象访问但不能被该类型的普通用户访问,可以认为protected访问是private与public的原创 2012-10-15 00:37:00 · 4893 阅读 · 0 评论 -
你所不知的private继承
你所不知的private继承 在C++的类中有许多种继承方式,而我们在软件设计和编写代码时用得最多的就是public继承,我们很少接触到private继承。但是我们在设计时真的有思考过什么时候应该用public继承,什么时候不该使用public继承,什么时候应该想想那些经常被我们遗忘的知识,让我们从它们被遗忘的角落里重拾它的光芒。例如private继承。As we all know原创 2012-10-22 00:45:05 · 5253 阅读 · 4 评论 -
C++指向类成员函数的指针
转载于:http://blog.csdn.net/jinjinclouded/article/details/5189540最近在开发中用到了函数指针,于是想整理了一下有关函数指针的概念。O(∩_∩)O~ 首先 函数指针是指向一组同类型的函数的指针;而类成员函数我们也可以相似的认为,它是指向同类中同一组类型的成员函数的指针,当然这里的成员函数更准确的讲应该是指非静态的成员函转载 2012-12-03 23:46:58 · 1489 阅读 · 0 评论 -
防止变量重复定义、头文件重复包含、嵌套包含
【转载】防止变量重复定义、头文件重复包含、嵌套包含【转自】 http://hi.baidu.com/zengzhaonong/blog/item/8a8871062d481f7f03088106.html#include文件的一个不利之处在于一个头文件可能会被多次包含,为了说明这种错误,考虑下面的代码:#include "x.h"#include "x.h"转载 2013-01-25 12:17:28 · 12454 阅读 · 4 评论 -
C#与C++相关概念的比较
1、在C#中,class的变量为引用类型,在C++中class的变量为值类型,如myclass mc,在C++中,mc是值类型,成员存储在程序的栈区,在C#中,mc是引用类型,指向堆中的成员。2、switch语句,C#中case后面可根字符串,如case “abc“,但在C++中却不行,C++中case后面只跟数字,字符,和枚举。3、在C#中没有C++中的私有继承和保护继承原创 2013-03-17 19:30:54 · 2068 阅读 · 0 评论 -
简述DLL编程
本文例子的源文件下载地址为:http://download.csdn.net/download/ljianhui/5606107一、什么是DLL动态链接库英文为DLL,是Dynamic Link Library 的缩写形式,DLL是一个包含可由多个程序同时使用的代码和数据的库,DLL不是可执行文件。动态链接提供了一种方法,使进程可以调用不属于其可执行代码的函数。函数的可原创 2013-06-02 13:56:36 · 4534 阅读 · 0 评论 -
C++编译器无法捕捉到的8种错误
C++是一种复杂的编程语言,其中充满了各种微妙的陷阱。在C++中几乎有数不清的方式能把事情搞砸。幸运的是,如今的编译器已经足够智能化了,能够检测出相当多的这类编程陷阱并通过编译错误或编译警告来通知程序员。最终,如果处理得当的话,任何编译器能检查到的错误都不会是什么大问题,因为它们在编译时会被捕捉到,并在程序真正运行前得到解决。最坏的情况下,一个编译器能够捕获到的错误只会造成程序员一些时间上的损失,转载 2013-07-09 13:40:32 · 4034 阅读 · 0 评论 -
提高程序运行效率的10个简单方法
对于每一个程序员来说,程序的运行效率都是一个值得重视,并为之付出努力的问题。但是程序性能的优化也是一门复杂的学问,需要很多的知识,然而并不是每个程序员都具备这样的知识,而且论述如何优化程序提高程序运行效率的书籍也很少。但是这并不等于我们可以忽略程序的运行效率,下面就介绍一下本人积累的一些简单实用的提高程序运行效率的方法,希望对大家有所帮助。注:以C/C++程序为例一、尽量变原创 2013-07-01 12:06:38 · 74360 阅读 · 45 评论 -
C++ 虚函数表解析
C++ 虚函数表解析http://blog.csdn.net/haoel转载于:http://blog.csdn.net/haoel/article/details/1948051 前言 C++中的虚函数的作用主要是实现了多态的机制。关于多态,简而言之就是用父类型别的指针指向其子类的实例,然后通过父类的指针调用实际子类的成员函数。这种技术可以让父类的指针有“多种形态”,这是一种转载 2013-07-22 10:26:05 · 1588 阅读 · 0 评论 -
C++ 对象的内存布局(下)
C++ 对象的内存布局(下)http://blog.csdn.net/haoel 转载于:http://blog.csdn.net/haoel/article/details/3081385 重复继承 下面我们再来看看,发生重复继承的情况。所谓重复继承,也就是某个基类被间接地重复继承了多次。 下图是一个继承图,我们重载了父类的f()函数。 其类继承转载 2013-07-22 10:33:53 · 1585 阅读 · 0 评论 -
C++ 对象的内存布局(上)
C++ 对象的内存布局(上)http://blog.csdn.net/haoel转载于:http://blog.csdn.net/haoel/article/details/3081328前言 07年12月,我写了一篇《C++虚函数表解析》的文章,引起了大家的兴趣。有很多朋友对我的文章留了言,有鼓励我的,有批评我的,还有很多问问题的。我在这里一并对大家的留言表示感谢。这转载 2013-07-22 10:30:44 · 1631 阅读 · 0 评论 -
说一说vector<bool>
vector标准库模版类应该是绝大多数c++程序员使用频率比较高的一个类了。不过vector也许就不那么被程序员所了解。关于vector不尝试研究一番,一般还不太容易知道其中蕴含的问题。首先得明确一点,那就是vector是vector的特化版。这个特化版本要解决的问题就是存储容量的问题。To optimize space allocation, a specialization o转载 2013-08-16 22:33:06 · 3852 阅读 · 0 评论 -
设计实现C++内存的半自动释放
C++的一大优点就直接提供了内存的申请和使用功能,让程序员可以根据自己的需要,通过alloc系列函数或new运算符来申请使用内存,但是C++却不像java或C#那样,提供了垃圾的自动回收机制,我们申请的内存要由自己来管理、自己来释放,也就是说,C++把内存管理的责任完全交给了程序员。申请资源是简单的,在需要的时候申请就可以了,然而请神容易送神难,内存的释放却是一个非常让人头痛的问题。有的程序员忘记原创 2014-02-22 00:21:55 · 7134 阅读 · 4 评论 -
程序运行时的内存空间分布
我们在写程序时,既有程序的逻辑代码,也有在程序中定义的变量等数据,那么当我们的程序进行时,我们的代码和数据究竟是存放在哪里的呢?下面就来总结一下。一、程序运行时的内存空间情况其实在程序运行时,由于内存的管理方式是以页为单位的,而且程序使用的地址都是虚拟地址,当程序要使用内存时,操作系统再把虚拟地址映射到真实的物理内存的地址上。所以在程序中,以虚拟地址来看,数据或代码是一块块原创 2014-03-21 01:33:18 · 37969 阅读 · 23 评论 -
Effective C++笔记1
Effective C++笔记11、 对于单纯常量,最好以 canst 对象或 enums 替换 #defines。对于形似函数的宏 (macros) ,最好改用 inline 函数替换 #defines。2、 尽量使用const。注意函数可根据指针形参和引用形参是否有const而实现重载,通过值传递的形参则不能根据是否有const而实现重载。当 const 和原创 2012-10-06 10:20:45 · 1085 阅读 · 0 评论 -
编写更节能的程序
编写更节能的程序 看到这个题目的时候,读者可能会诧异:代码也有节能与不节能之分?我们说,是的,本质上,程序所调度的是硬件资源,不合理的硬件调度,会使得设备调度效率不高,从而产生更高的能耗。 实际上,随着移动终端的流行,功耗比已然成为比较处理器的重要参数。在已经上市,可能大放光彩的超级本上(Ultrabook),功耗更成为重要的考虑因素。实际上英特尔已经大量考虑了硬件层面的功耗优化,微软转载 2012-09-11 19:06:40 · 1766 阅读 · 0 评论 -
构造函数、赋值操作函数、析构函数
构造函数1、构造函数的与类的名字相同,并且不能指定返回类型,不能声明为const。因为构造函数的工作是初始化对象,不管对象是否为const,都用一个构造函数来初始化该对象。2、构造函数分两个阶段执行:(1)初始化阶段;(2)普通的计算阶段。3、使用构造函数初始化列表的版本初始化数据成员,没有定义初始化列表的构造函数版本在构造函数函数体中对数据成员赋值。4、没有默认构造函数的类类型的原创 2012-07-11 11:48:05 · 1239 阅读 · 0 评论 -
C++中的static
——摘自百度百科 1、静态数据成员 在类内数据成员的声明前加上关键字static,该数据成员就是类内的静态数据成员。先举一个静态数据成员的例子。 //Example 5 #include class Myclass { public: Myclass(int a,int b,int c); void GetSum();转载 2012-07-12 11:53:49 · 920 阅读 · 0 评论 -
C++面向对象编程笔记(一)
C++面向对象编程(一)今天看了一点primer中有关面向对象编程的内容,以下是自己的一点总结。一、关于虚函数1、定义为virtual的函数是基类期待派生类重新定义的,基类希望派生类继承的函数不能定义为虚函数。在派生类中重新定义的函数应与虚函数具有相同的形参个数和形参类型。以实现统一的接口,不同定义过程。2、通过基类的引用(或指针)调用虚函数时,发生动态绑定。引用(或指针)既可以指原创 2012-07-13 22:11:24 · 1167 阅读 · 0 评论 -
C++面向对象编程笔记(二)
C++面向对象编程(二)一、重载与覆盖成员函数被重载的特征:(1 )相同的范围(在同一个类中);(2 )函数名字相同;(3 )参数不同;(4 )virtual关键字可有可无。覆盖是指派生类函数覆盖基类函数,特征是:(1 )不同的范围(分别位于派生类与基类);(2 )函数名字相同;(3 )参数相同;(4 )基类函数必须有virtual关键字。二原创 2012-07-14 11:30:14 · 1054 阅读 · 0 评论 -
C++中this指针的理解
首先要理解class的意思。class应该理解为一种类型,象int,char一样,是用户自定义的类型。(虽然比int char这样build-in类型复杂的多,但首先要理解它们一样是类型)。用这个类型可以来声明一个变量,比如int x, myclass my等等。这样就像变量x具有int类型一样,变量my具有myclass类型。理解了这个,就好解释this了,my里的this 就是指向my的指转载 2012-07-14 14:31:20 · 8589 阅读 · 2 评论 -
模板小结
模板前天看了primer有关类的继承的内容,并做了一些笔记,昨天和今天看了C++里面的泛型编程的模板,现在也来总结一下吧。一、定义模板定义:模板就是实现代码重用机制的一种工具,它可以实现类型参数化,即把类型定义为参数, 从而实现了真正的代码可重用性。模版可以分为两类,一个是函数模版,另外一个是类模版。在C++中,模板是泛型编程的基础,模板是创建类或函数的蓝图或公式。模板定义为以关键原创 2012-07-15 17:46:14 · 1645 阅读 · 0 评论 -
浅谈C++虚函数
C++中的虚函数一、定义定义:在某基类中声明为 virtual并在一个或多个派生类中被重新定义的成员函数。 语法:virtual 函数返回类型函数名(参数表) { 函数体 } 用途:实现多态性,通过指向派生类的基类指针,访问派生类中同名覆盖成员函数 虚函数必须是基类的非静态成员函数,其访问权限可以是protected或public。定义为virtual的函数是基原创 2012-07-14 14:22:33 · 1084 阅读 · 0 评论 -
C++的特殊工具与技术
特殊工具与技术 一、优化内存 1、策略:预先分配用于创建对象的内存,需要时在预先分配的内存中构造每人新对象。 2、allocator类;a.destroy(p),运行T*指针p所指对象的析构函数。注意,运行析构函数并不释放对象所在的内存,要想释放内存就要调用函数a.deallocate(p,n),释放然为p的T*指针中包含的地址处保存T类型的n个对象。原创 2012-07-18 12:23:56 · 1354 阅读 · 0 评论 -
指向类成员的指针并非指针
指向类成员的指针并非指针 对于指向类成员的指针,必须紧记,指向类成员(非static)的指针并非指针。 1、与常规指针不同,一个指向成员的指针并不指向一个具体的内存位置,它指向的是一个类的特定成员,而不是指向特定对象里的特定成员。通常最清晰的做法,是将指向数据成员的指针看作为一个偏移量。这个偏移量告诉你,一个特定成员的位置距离对象的起点有多少原创 2012-07-17 17:34:16 · 1488 阅读 · 0 评论 -
一个类的实例化对象所占空间的大小
又一转载,个人感觉说得不错!一个类的实例化对象所占空间的大小? 注意不要说类的大小,是类的对象的大小. 首先,类的大小是什么?确切的说,类只是一个类型定义,它是没有大小可言的。 用sizeof运算符对一个类型名操作,得到的是具有该类型实体的大小。 如果 Class A; A obj; 那么sizeof(A)==sizeof(obj) 那么sizeof(A)的大小和成员的大小总和是什么关系呢,很转载 2012-07-23 00:01:07 · 3070 阅读 · 1 评论 -
using与命名空间
Using与命名空间在学习C++的过程中,我们经常看到一些书上写着的一行语句:using namespace std;在说明using的使用,必须先了解命名空间的概念和使用。在一个给定作用域中定义的每个名字在该作用域中必须是唯一的,对庞大、复杂的应用程序而言,这个要求可能难以满足。这样的应用程序的全局作用域中一般有许多名字定义。由独立开发的库构成的复杂程序列更有可能遇到名字冲突——同样的名原创 2012-07-16 18:08:53 · 4065 阅读 · 0 评论 -
C++异常处理
在C语言中是没有异常处理机制的,异常处理是C++中的一个对程序运行出错或逻辑出错的一个处理机制,因为C++处理的问题比C语言处理的问题更为复杂,所以不能像C那样,总是假定程序能正常运行,不会发生错误。在C中要想处理程序运行中出现的错误,也只能够用if语句去逐个检查和判断。不幸当发生问题时,程序直接崩溃,没有提供出错信息,让人摸不着头脑。C++中的异常处理使我们能够将问题的检测和问题的解决分离,这样原创 2012-07-16 11:17:16 · 1744 阅读 · 1 评论 -
C++中const的运用及注意
在我学习C++的过程中,对const的应用不可不说是最容易混乱和最容易出错的。但是const却是一个好东西,每一个C++程序员都必须掌握它。以下为本人的一点总结。 1、用const 修饰函数的参数 如果参数作输出用,不论它是什么数据类型,也不论它采用“指针传递”还是“引用传递”,都不能加const 修饰,否则该参数将失去输出功能。const 只能修饰输入参数。a, 如果输入参数采原创 2012-07-06 22:59:07 · 1343 阅读 · 0 评论 -
C++容器的一些总结
关于C++容器的一些总结1、容器的定义在数据存储上,有一种对象类型,它可以持有其它对象或指向其它对像的指针,这种对象类型就叫做容器。很简单,容器就是保存其它对象的对象,当然这是一个朴素的理解,这种“对象”还包含了一系列处理“其它对象”的方法。2、容器的种类顺序容器:是一种各元素之间有顺序关系的线性表,是一种线性结构的可序群集。顺序性容器中的每个元素均有固定的位置,除非用删除或插原创 2012-07-09 16:07:41 · 2428 阅读 · 2 评论 -
明智地使用Pimpl
明智地使用Pimpl 首先引用一下别人的内容pimpl 用法背后的思想是把客户与所有关于类的私有部分的知识隔离开。由于客户是依赖于类的头文件的,头文件中的任何变化都会影响客户,即使仅是对私有节或保护节的修改。pimpl用法隐藏了这些细节,方法是将私有数据和函数放入一个单独的类中,并保存在一个实现文件中,然后在头文件中对这个类进行前向声明并保存一个指向该实现类的指针。类的构造函数分配这个原创 2012-09-04 22:26:18 · 5455 阅读 · 0 评论 -
C++编程规范(101条规则、准则与最佳实践)
C++编程规范(101条规则、准则与最佳实践)虽然是书本的目录,但也是高度的概括和总结。 组织和策略问题第0条:不要拘泥于小节(了解哪些东西不应该标准化)第1 条:在高警告级别干净利落地进行编译第2 条:使用自动构建系统第3 条:使用版本控件器第4 条:做代码审查 设计风格第5 条:一个实体应该只有一个紧凑的职责第6 条:正确、简单和清晰第一第7 条原创 2012-09-09 22:43:48 · 3639 阅读 · 0 评论 -
C++ string类的隐式共享写时拷贝的实现及设计要点
字符串一种在程序中经常要使用到的数据结构,然而在C中却没有字符串这种类型。在C++中,为了方便字符串的使用,在STL中提供了一个string类。该类维护一个char指针,并封装和提供各种的字符串操作。一、为什么要实现隐式公享写时拷贝试想一下,如果我们要自己实现一个string类,最简单的方式是什么?就是让每一个string类的实例维护一个在内存中独立的字符数组,每个string对象原创 2014-04-04 00:08:49 · 8101 阅读 · 8 评论