- 博客(35)
- 资源 (19)
- 收藏
- 关注
原创 为什么析构函数通常很虚?
前面我们已经说过, 构造函数不可以为虚函数。 现在, 我们要说, 析构函数可以为虚函数, 而且通常需要为虚函数。 先看一个简单的程序:#include using namespace std;class A{public: A() { cout << "A constructor" << endl; }};class B : public A{public: B
2014-11-30 23:36:10 7402
原创 构造函数可以是虚函数吗? 为什么?(某公司实习生招聘面试试题)
多年前的实习生面试, 碰到了这个题目, 最近又听人谈论起, 所以来简要说一下。 先来看一份简单的代码:#include using namespace std;class A{ virtual void fun() { }};int main(){ cout << sizeof(A) << endl; // 4 return 0;} 上述程序的结果之所
2014-11-30 23:09:03 8861 2
原创 最简单的异质链表---链表中存放不同类型的对象/结点
我们已经很熟悉链表了, 到目前为止, 我们接触到的链表中的结点类型都是相同的。 但是, 在实际中, 很多场景都要用链表来管理不同类型的对象/结点, 这样的链表叫异质链表, 它非常常见, 也很实用。 异质链表的实现有很多方式, 下面, 我们来介绍最简单的实现方式, 作为异质链表的入门吧。 先思考一下, 如果将这些不同类型的对象用链表进行直接链接, 显然不太好操作(不能用for循环来搞
2014-11-30 22:03:39 14393 3
原创 谈谈软件快速交付压力下程序猿们的“养寇自保”行为---为什么总在加班和通宵定位修改bug?
我们先来看看这样一个奇怪的悖论: 第一种程序猿, 花了一天时间, 就快速地实现了某一软件功能, 但是写的代码风格很差, 别人难以读懂, 该加代码注释的地方不加, 该加异常判断的地方不加, 不考虑什么代码框架。结果呢, 当场景复杂后,代码bug到处跑出来, 于是又忙乎地搞了两天的bug定位和修改。 这三天, 领导看到了他的快速, 看到了他的忙碌, 看到了他加班那么晚回去, 心想
2014-11-29 23:33:55 9601 3
原创 一个简单的进程计时器
超时太常用了, 下面来写一个进程计时器, 并用它来做超时限制#include #include #include using namespace std;// 计时器long getTime(){ static int flag = 1; static long firstTime = 0; if(1 == flag) { firstTime = time(NU
2014-11-29 21:18:39 8002
原创 刚才写代码遇到一个很不起眼的bug, 火眼金睛的猿们来看看吧
直接看三个程序:#include using namespace std;int main(){ char szBuf[1025] = "abc\\defg"; char *p = strrchr(szBuf, '\\'); *p = '\0'; cout << szBuf << endl; // abc return 0;}#include using
2014-11-29 21:09:00 7896 5
原创 软件使用权的控制---C/C++代码的实现
有时候, 自己写了一个软件, 放到网上, 大家都可以使用。但是, 如果要控制别人的使用权, 该怎么办呢? 在本文中, 我们用一个极其简单的例子来说明控制机制。 当然, 如果你的软件写得够好, 有很大的客户需求, 搞一个使用权的控制机制, 说不定可以小小地赚一笔钱呢 我们把这个软件的名称定为Beauty.exe吧, 其源码是(为了简便起见, 魔鬼数字我就不替换成宏了):
2014-11-29 20:48:27 19391 9
原创 如何获取当前运行的.exe所在路径的双斜线形式?---利用GetModuleFileName
先来看一个简单的程序:#include #include using namespace std;int main(){ char szBuf[1025] = {0}; GetModuleFileName(NULL, szBuf, sizeof(szBuf)); cout << szBuf << endl; // C:\Documents and Settings\A
2014-11-28 23:42:11 8544
原创 XX杯, 再见!
2014年XX杯乒乓球联赛落下帷幕, Chen GG获得男单冠军, MKT获得了团体冠军, 祝贺一下 在本次男单比赛中, 我个人闯入公司男单16强, 也算可喜可贺. 在团体比赛中, 我们也是16强。 本届比赛, 留下了许多精彩的瞬间。 单打比赛中, 受公司会长的委托, 我负责自己小组的组织安排工作, 最终顺利完成这个小任务。 在团体赛中, 再次受会长委托, 担任1/4决赛,
2014-11-27 00:26:11 7778 1
原创 谈谈规避问题在软件开发中的一席之地
什么是规避问题呢?首先要说明, 规避问题不是逃避问题。 比如说, 明天有一个比较重要的考试, 今晚我就在考点附近租了一间房子, 结果呢, 快睡觉的时候, 水龙头坏了, 在不断地滴水, 2s一滴, 而且声音还不小。 怎么办呢? 已是夜深人静, 酒店服务人员比较稀少了, 即使有, 也没有水电修理工啊。 难道非要打个电话, 让别人过来修好? 这不是影响明天的考试了吗? 找酒店服务人员
2014-11-27 00:06:24 8863
原创 学会利用差异对照法快速定位bug所在的模块
在软件开发中, 遇到bug时, 不同模块的开发人员经常相互扯皮, 我门说是你们的问题, 你们说是我们的问题, 结果呢,两方人都不愿意花精力去仔细定位, 两方都希望对方先分析一下, 然后确定bug所在位置。 相互踢皮球嘛 在实际开发中, 这也见怪不怪了。大家都很忙, 有时候需要一些特殊的方法, 确定问题所在的模块, 而不是一有问题, 就去死抠代码, 这样会累死的。
2014-11-26 00:05:30 8746
原创 int* 转double* 时的内存越界访问
今天一同事让我帮看一个程序, 最后定位到的问题是内存越界:int main(){ int a = 0; *(double*)&a = 0; // 访问了非法内存, 运行时出错 return 0;}#include using namespace std;int main(){ int a = -1; int b = -1; *(double*)&b = 0; //
2014-11-25 23:18:43 7992
原创 昨晚在公司附近遇到两个行骗的女孩---大家要提高警惕啊, 这年头, 坏人特别多
昨天在公司加班, 比较晚下班, 回来的路上, 突然被一个女孩拽了一下衣服, 我一看, 有两个装得很可怜的女孩向我走来。 她们开口就说: 我们遇到了一点困难, 没钱吃饭, 肚子非常饿, 我们不要钱, 你带我们去吃点东西就可以了。 我一看, 心想, 这不要钱, 只要东西吃, 应该是真遇到困难了, 当时犹豫了一下, 但很多年前被类似的人骗过, 所以最后就没有帮她们。 不料, 她们两人随...
2014-11-23 22:53:41 7646 1
原创 结构体数组做映射(写了个风格还算靠谱的程序, 欢迎大家找茬拍砖, 共同进步)
之前说过了, 数组的本质就是映射, 下面, 我们看看更高级的映射---利用结构体
2014-11-22 01:04:04 9440 2
原创 语法糖---C++的运算符重载
语法糖(Syntactic sugar),也译为糖衣语法,是由英国计算机科学家彼得·约翰·兰达(Peter J. Landin)发明的一个术语,指计算机语言中添加的某种语法,这种语法对语言的功能并没有影响,但是更方便程序员使用。通常来说使用语法糖能够增加程序的可读性,从而减少程序代码出错的机会。
2014-11-08 22:48:13 7976
原创 形象地聊聊C++中的浅拷贝与深拷贝
先来看一个简单的程序:#include using namespace std;class Point{public: int x; int y; Point(int xx, int yy) { x = xx; y = yy; }};int main(){ Point A(1, 2); Point B(A); // 执行了编译器默认的浅拷贝 cout
2014-11-08 00:13:37 7291 1
原创 C++的常量引用
我们先来看一个简答的程序:#include using namespace std;int main(){ int &a = 1; // error cout << a << endl; return 1;} 显然, 这个程序是错误的
2014-11-06 23:20:18 13634 7
原创 C++静态成员变量
#include using namespace std;class A{ static int x;};int A::x = 100;int main(){ A a; return 0;} 如此一来, 似乎是对
2014-11-04 23:18:03 7334 1
原创 C/C++中##符号的使用
#include using namespace std;#define A(i) a##iint main(){ int A(3) = 3; cout << a3 << endl; // 3 return 0;} 但是, 下面这样不行
2014-11-04 22:53:15 7328 2
原创 原来union也可以有自己的函数(方法)
第一次听说, 所以来记录一下:#include using namespace std;union U{private: int i; float f;public: U(int ii) { i = ii; } U(float ff) { f = ff; } void setInt(int ii) { i = ii; } void set
2014-11-04 00:05:50 8582
原创 对象的初始化
#include using namespace std;class A{ private: int x; int y;public: A() { cout << "default constructor" << endl; } A(int xx, int yy) { cout << "constructor" << endl; x = xx; y
2014-11-03 23:25:44 7031
原创 C/C++中#符号的使用
#include using namespace std;#define PR(x) cout " << x << endl;int main(){ int i = 10; PR(i); float f = 10.3f; PR(f); return 0;} 结果为:
2014-11-02 12:06:44 7270
原创 我眼中的C++继承初探
code0.cpp 热身一下C++, 无继承:#include <iostream>using namespace std;class A{public: int x;};class B{public: int x;};int main(){ cout << sizeof(A) << endl; // 4 c...
2014-11-01 23:26:07 7152 1
linux protobuf安装文件
2016-11-04
linux tree命令的源码
2015-11-01
编译好的openssl库和头文件
2014-12-14
入门数据库sqlite3的最佳实践资料
2014-08-12
在Windows下学习Linux命令
2013-08-08
音频处理软件Gold Wave
2013-07-17
H.264visa软件
2013-07-13
YUVviewer :原始的YUV视频的播放器
2013-06-24
经典的C语言编译器:TC2.0
2013-06-23
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人