
C++点滴感悟
ithzhang
继续向架构师挺进
展开
-
C++测试类大小中的内存对齐问题
<br /># include<iostream> using namespace std; class A{ public : int b; void test() { int j; } private: char c; int a; }; int main() { cout<<sizeof原创 2011-04-01 21:37:00 · 2205 阅读 · 1 评论 -
你所不知道的C和C++运行库
你所不知道的C和C++运行库 周五晚,小雨,少见的未加班。无聊,遂准备写一篇博客,介绍一下C和C++运行库,只因发现工作几年的人对此一知半解的大有人在。 在使用VC构建项目时,经常会遇到下面的链接错误: 初学者面对这些错误常常不知所错:libcmt.lib是什么东西?msvcrtd.dll又是干吗用的?在使用VC++时我们也常常对下面的运行库配置项原创 2014-02-28 22:17:10 · 23483 阅读 · 11 评论 -
C++学了这么多年,你仍不知道的事!!!
C++学了这么多年你知道为什么定义类时,类的定义放在.h文件中,而类的实现放在cpp文件中。它们为什么能够关联到一起呢?你知道什么东西可以放在.h文件中,什么不能。什么东西又可以放在cpp文件中。如果你忘记了或是压根就不明白,那么读过此文你会清晰无比!! 首先谈下声明与定义的区别。 声明是将一个名称引入程序。定义提供了一个实体在程序中的唯一描述。声明和定义有时是原创 2012-10-27 19:43:14 · 42111 阅读 · 17 评论 -
使用C++实现简单线程池v1.0
C++实现线程池。 欢迎转载,转载请注明原出处:http://blog.youkuaiyun.com/ithzhang/article/details/9020283 代码地址:https://github.com/ithzhang/ThreadpoolLib.git本文介绍的线程池采用C++语言,在windows平台下实现。此版本为Version 1.0,以后还会推出功原创 2013-06-04 11:05:36 · 23459 阅读 · 20 评论 -
零基础学习COM之IUnknown抽象接口介绍
零基础学习COM之IUnknown抽象接口介绍 传统的软件由单个的二进制文件组成。组件将单个二进制文件分割为多个独立的部分,每个部分都被称为一个组件。采用组件技术后,在需要对程序进行修改和改进时,只需替换某个组件模块即可。 在开发程序时可以从组件库中选择合适的组件快速构造出满足需要的应用程序。这大大提高了程序的可维护性和开发效率。 组件化程序设计思想原创 2012-11-24 08:36:12 · 10196 阅读 · 2 评论 -
从def中获得lib文件
程序使用dll时需要lib 文件,下载sqlite3时只能得到def和dll文件,所以可以使用lib 命令生成一个lib ,过程如下1)将C:/Program Files/Microsoft Visual Studio 8/VC/bin放在环境变量path中2)启动CMD,进入到放def 文件的目录3)lib /DEF :sqlite3.def /machine:IX8转载 2012-11-21 14:51:28 · 1887 阅读 · 0 评论 -
快排
void quicksort(int num[],int start,int end){ int key=num[start]; int prev = start; int last = end; //结束条件必不可少,否则将会进入死循环。 if(prev >= last) { return; } while(prev < last) { while转载 2012-09-12 08:47:20 · 1725 阅读 · 0 评论 -
堆与堆排序
堆排序与快速排序,归并排序一样都是时间复杂度为O(N*logN)的几种常见排序方法。学习堆排序前,先讲解下什么是数据结构中的二叉堆。二叉堆的定义二叉堆是完全二叉树或者是近似完全二叉树。二叉堆满足二个特性:1.父结点的键值总是大于或等于(小于或等于)任何一个子节点的键值。2.每个结点的左子树和右子树都是一个二叉堆(都是最大堆或最小堆)。当父结点的键值总是大于或等于任何一个子节转载 2012-07-14 15:32:39 · 1901 阅读 · 0 评论 -
Debug与Release版本的区别详解
Debug 和 Release 并没有本质的区别,他们只是VC预定义提供的两组编译选项的集合,编译器只是按照预定的选项行动。如果我们愿意,我们完全可以把Debug和Release的行为完全颠倒过来。当然也可以提供其他的模式,例如自己定义一组编译选项,然后命名为MY_ABC等。习惯上,我们仍然更愿意使用VC已经定义好的名称。 Debug版本包括调试信息,所以要比Release版本大很多(转载 2012-05-17 10:54:24 · 102443 阅读 · 5 评论 -
变长参数函数(转载)
变长参数的函数即参数个数可变、参数类型不定 的函数。设计一个参数个数可变、参数类型不定的函数是可能的,最常见的例子是printf函数、scanf函数和高级语言的Format函数。在C/C++中,为了通知编译器函数的参数个数和类型可变(即是不定的、未知的),就必须以三个点结束该函数的声明。view plaincopy to clipboardprint?// pr转载 2011-11-28 22:42:11 · 14965 阅读 · 1 评论 -
如何自学一门新的语言:由学习C++想到的
上半年学了C++.平时我把大部分时间都用在了它上面。除了C++大学教程那本书外我还看了C++ primer。三个月的时间我把它们都看完了。期间做了大量的笔记,每遇到一个疑问我都会在书上标示出来,注明日期。等以后明白了再来回答。自我感觉基础知识还是掌握的挺好的。原创 2011-07-04 11:05:27 · 12263 阅读 · 23 评论 -
关于unknown character '0xa1'的错误
最近在学习windows下的程序设计。主要是sdk.今天遇到个错误,就是说unknown character 0xa1, 找了很长时间,都不知道错误在哪儿,上网一搜,遇到同一问题的还真不是我一个人,一看原来是全角空格惹的祸。这错误很隐蔽,但凭肉眼很难分辨,如果不是上网搜估计自己很难找到。原创 2011-06-09 07:54:00 · 4833 阅读 · 0 评论 -
一到段错误的代码带来的收获。
class point{public:static void init(){x = 1;y = 2;}public:static int x,y; };void main(){point::init();}看孙鑫老师的视频中讲到,类中的函数前加了static,说明这个函数属于类,不属于某个实例对象,该静态函数不用实例化就存在代码区了,所以在main中可以不用实例化就可以point::init()这原创 2011-03-31 21:13:00 · 1937 阅读 · 1 评论 -
类在其自身的定义体内作为数据类型
只有static成员变量,指针或者引用,才可以在一个类的定义体内,用本类作为数据类型,如:class Bar{public: ......private: static Bar member1; //OK原创 2011-04-03 22:36:00 · 2010 阅读 · 0 评论 -
特殊数据类型成员变量的初始化
有些成员变量的数据类型比较特别,它们的初始化方式也和普通数据类型的成员变量有所不同。这些特殊的类型的成员变量包括:a. 常量型成员变量,如:const int i;b. 引用型成员变量 如:int &i;c. 静态成员变量 .如:static int i;d. 整型静态常量成员变量 如:static const int i;原创 2011-03-31 20:53:00 · 1857 阅读 · 0 评论 -
终于确定要学c++了
下学期就要学面向对象程序设计了。之前一直在犹豫到底学哪门语言:c++,c#,java.java我是不考虑的。让我为难的是c++,和c#.后来看了很多的文章也咨询了很多的学长老师。我确定了我要学习c++.有人说c++很难,学了会让人失去信心。说java,和c#相对简单也很好找工作。。。。。。。。。之所以选择c++,可能跟别人说真正的高手都是c++学得好得人,c#,和java没有什么技术含原创 2010-12-16 23:24:00 · 3107 阅读 · 7 评论 -
什么是重构
重构指在不改变程序原有行为的基础上,对代码进行修改,以改进其内部结构。是在代码写好之后,改进它的设计。 对于小的程序,快速而随性的构建一个简单程序,没什么大不了的。但如果我们构建的代码是复杂系统的一部分,那么就需要评估下代码的好坏了。程序还是可以正常工作,编译器不管代码是美是丑。但是当我们要修改系统,修复bug或扩展功能的时候,问题就出现了。这需要人的参与,人是在乎这个的。丑陋的代码是原创 2015-01-15 19:50:48 · 5558 阅读 · 0 评论