向左右向右走 —— 小时了了的技术博客

关注C++开发技术、架构设计、软件项目管理、软件产品管理等

摘要: 有一种普遍的说法是把封装、继承和多态并称为面向对象的三大特征。如果你很熟悉C++并且对面向对象思想有过一些思考,那么很可能对这个说法有过怀疑,面向对象思想在本质上认为世界是由对象构成的,和面向过程是世界观的不同,而所谓的三大特征实际和面向对象的思想本质没有半毛钱的关系,准确的表述应该是封装、继承和多态是C++相对于C的三大特征。如果你碰巧了解一点C++编译器可能会发现封装也好,继承、多态也好都只是语法糖,技巧层面的东西而已,和思想无关。以上为废话。本文主要就C++的继承机制进行一些讨论。很多C++教材在讲到继承时喜欢利用几何上的一些概念,比如对如下的集合关系进行建模: 在一次内部技术培训的时候 阅读全文
posted @ 2011-10-17 09:08 小时了了 阅读(1868) 评论(17) 推荐(3) 编辑
摘要: 需求源于为博客文章添加tag的字符串处理: tag之间以“,”分隔,要根据这个分隔符分离出各个tag;另外处于习惯用户可能敲入多余的空格,所以需要对tag的左右空格进行剪切。STL的string类没有现成的方法只好自己写一个。第一版函数原型如下:Code highlighting produced by Actipro CodeHighlighter (freeware)http://www.CodeHighlighter.com/-->void find_all_words(conststring& str, char decollator, vector words);其中参 阅读全文
posted @ 2011-01-22 15:56 小时了了 阅读(761) 评论(0) 推荐(1) 编辑
摘要: 我们假设这样一种应用场景,有两个类A和B,在B中需要调用A的一个方法(成员函数)。那么我们的代码可能是这个样子的:class A{public: void Func(void) { printf("%s\r\n", __FUNCTION__); }};class B{public: void UseA() { a->Func(); }public: A* a;}; 调用代码是这样的:A a;B b;b.a = &a;b.UseA(); 我们观察上面的代码,看看有什么问题:两个类中B对A产生了一个依赖关系,这让人有点不爽;哪天我们想用另外一个类C替代A的作用意味 阅读全文
posted @ 2010-12-06 12:22 小时了了 阅读(541) 评论(3) 推荐(2) 编辑
摘要: 先看一段使用了std::list的代码: std::list array; for(int i = 0; i ::iterator it = array.begin(); it != array.end(); ++it) { (*it) += 1; } for (std::list::iterator it = array.begin(); it != array.end(); ++it) { printf("%d\t", *it); } 我们观察这段代码。首先,它是正确的,没什么错误,但看起来太臃肿了。本来我要完成每个元素的值加1关键的代码只有一行 (*it) += 1; 阅读全文
posted @ 2010-12-04 15:49 小时了了 阅读(1314) 评论(0) 推荐(0) 编辑