2012年9月9日
摘要: 根据二叉树的后序遍历以及中序遍历还原二叉树【题目】假设一棵二叉树的后序遍历序列为 DGJHEBIFCA ,中序遍历序列为 DBGEHJACIF ,则其前序遍历序列为 ( ) 。A. ABCDEFGHIJB. ABDEGHJCFIC. ABDEGHJFICD. ABDEGJHCFI由题,后序遍历的最后一个值为A,说明本二叉树以节点A为根节点(当然,答案中第一个节点都是A,也证明了这一点)下面给出整个分析过程【第一步】由后序遍历的最后一个节点可知本树根节点为【A】加上中序遍历的结果,得知以【A】为根节点时,中序遍历结果被【A】分为两部分【DBGEHJ】【A】【CIF】于是作出第一幅图如下【第二步】 阅读全文
posted @ 2012-09-09 14:51 bitbit 阅读(559) 评论(0) 推荐(0) 编辑
摘要: CRT运行时库1)运行时库就是 C run-time library,是 C 而非 C++ 语言世界的概念:取这个名字就是因为你的 C 程序运行时需要这些库中的函数.2)C 语言是所谓的“小内核”语言,就其语言本身来说很小(不多的关键字,程序流程控制,数据类型等);所以,C 语言内核开发出来之后,Dennis Ritchie 和 Brian Kernighan 就用 C 本身重写了 90% 以上的 UNIX 系统函数,并且把其中最常用的部分独立出来,形成头文件和对应的 LIBRARY,C run-time library 就是这样形成的。3)随后,随着 C 语言的流行,各个 C 编译器的生产商 阅读全文
posted @ 2012-09-09 14:49 bitbit 阅读(970) 评论(0) 推荐(0) 编辑
摘要: classNoncopyable{protected:Noncopyable(){};~Noncopyable(){};private:Noncopyable(constNoncopyable&src);constNoncopyable&operator=(constNoncopyable&src);//声明一下就行了};为了禁用编译器自动提供的功能,你必须将相关的成员函数声明为 private 的,同时不要实现它。这里使用一个像 noncopyable 这样的类来完成这一工作。 阅读全文
posted @ 2012-09-09 14:45 bitbit 阅读(321) 评论(0) 推荐(0) 编辑
摘要: 软件系统设计思路 最近有学弟问我,拿到一个软件需求,但是却不知道怎么才能更好地架构好整个系统,在此,我简单地根据我的经验介绍一下我是怎么设计一个软件系统的吧。当然,这只是我的一个简单的思路而已,真正涉及到一个大的软件项目,可能还要复杂很多很多。 要设计一个面向对象的系统,建议遵循如下思路:1. 调研,完成一份详细的需求文档 (1)系统要实现什么功能 (2)性能上有什么特别的要求 (3)哪些是技术难点,可以的话对技术难点首先测试攻关2. 确定系统的运行环境 (1)系统运行的操作系统:widows,linux,unix等 (2)使用何种编程语言:c/c++,java,C# 等 (3)使用何种界.. 阅读全文
posted @ 2012-09-09 14:40 bitbit 阅读(1520) 评论(0) 推荐(0) 编辑
摘要: 类设计五项基本原则原则:单一职责原则开放封闭原则Liskov替换原则依赖倒置原则接口隔离原则第8章 单一职责原则 ( SRP )就一个类而言.应该仅有一个引起它变化的原因. 一个class就其整体应该只提供单一的服务 如果一个class提供多样的服务,那么就应该把它拆分,反之,如果一个在概念上单一的功能却由几个class负责,这几个class应该合并 第9章 开放-封闭原则 ( OCP )软件实体(类. 模块. 函数等等)应该是可以扩展的. 但是不可修改的.例如.把一个类的功能抽象出来.形成一个抽象接口.然后对该接口编程.这样当需要扩展时只要从该接口派生一个新类就可以完成扩展的功能.看一个例. 阅读全文
posted @ 2012-09-09 14:34 bitbit 阅读(966) 评论(0) 推荐(0) 编辑
摘要: C++虚函数表解析 C++中的虚函数的作用主要是实现了多态的机制。关于多态,简而言之就是用父类型别的指针指向其子类的实例,然后通过父类的指针调用实际子类的成员函数。这种技术可以让父类的指针有“多种形态”,这是一种泛型技术。所谓泛型技术,说白了就是试图使用不变的代码来实现可变的算法。比如:模板技术,RTTI技术,虚函数技术,要么是试图做到在编译时决议,要么试图做到运行时决议。关于虚函数的使用方法,我在这里不做过多的阐述。大家可以看看相关的C++的书籍。在这篇文章中,我只想从虚函数的实现机制上面为大家 一个清晰的剖析。当然,相同的文章在网上也出现过一些了,但我总感觉这些文章不是很容易阅读,大段大段 阅读全文
posted @ 2012-09-09 13:58 bitbit 阅读(194) 评论(0) 推荐(0) 编辑
摘要: C++多态性C++中的多态(虽然多态不是C++所特有的,但是C++中的多态确实是很特殊的)分为静多态和动多态(也就是静态绑定和动态绑定两种现象),静动的区别主要在于这种绑定发生在编译期还是运行期,发生在编译期的是静态绑定,也就是静多态;发生在运行期的则是动态绑定,也就是动多态。静多态可以通过模板和函数重载来实现(之所说C++中的多态主要还是因为模板这个东西),下面举两个例子:1)函数模板template <typename T>T max(const T& lsh, const T& rhs) { return (lsh > rhs) ? lsh : rhs; 阅读全文
posted @ 2012-09-09 13:54 bitbit 阅读(1320) 评论(0) 推荐(1) 编辑
摘要: 重载、覆盖、多态与函数隐藏 经常看到C++的一些初学者对于重载、覆盖、多态与函数隐藏的模糊理解。在这里写一点自己的见解,希望能够C++初学者解惑。 要弄清楚重载、覆盖、多态与函数隐藏之间的复杂且微妙关系之前,我们首先要来回顾一下重载覆盖等基本概念。 首先,我们来看一个非常简单的例子,理解一下什么叫函数隐藏hide。 #include <iostream> using namespace std; class Base{ public: void fun() { cout << "Base::fun()" << endl; } }; cla 阅读全文
posted @ 2012-09-09 13:51 bitbit 阅读(377) 评论(0) 推荐(0) 编辑
摘要: 图文例解C++类的多重继承与虚拟继承图文例解C++类的多重继承与虚拟继承文章导读:C++允许为一个派生类指定多个基类,这样的继承结构被称做多重继承。 在过去的学习中,我们始终接触的单个类的继承,但是在现实生活中,一些新事物往往会拥有两个或者两个以上事物的属性,为了解决这个问题,C++引入了多重继承的概念,C++允许为一个派生类指定多个基类,这样的继承结构被称做多重继承。 举个例子,交通工具类可以派生出汽车和船连个子类,但拥有汽车和船共同特性水陆两用汽车就必须继承来自汽车类与船类的共同属性。 由此我们不难想出如下的图例与代码: 当一个派生类要使用多重继承的时候,必须在派生类名和冒号之后... 阅读全文
posted @ 2012-09-09 13:50 bitbit 阅读(206) 评论(0) 推荐(0) 编辑
摘要: 如何根据异常提示信息找出程序出错代码LINUX 编程 2010-06-23 22:44:10 阅读136 评论0 字号:大中小订阅看到网上说在debug下可以找到预料的崩溃地址行,但是实际上没有什么用呀。(既然在debug下,那直接用调试器找不更好吗? 费这么大劲干什么)(转的文章在后面)Release版本(指编译器优化后的),要找崩溃地址行就比较费劲了。linux下的方法:1、使之生成core dump文件2、gdb调试该core文件3、根据大概的堆栈信息,运行disassemble (具体用法见gdb帮助)4、根据崩溃地址找到对应的崩溃反汇编码5、分析反汇编代码,找到程序中崩溃代码。(如果 阅读全文
posted @ 2012-09-09 13:49 bitbit 阅读(3951) 评论(0) 推荐(0) 编辑
摘要: C++的重写,重载,重定义1. 重写 (override):(又称覆盖) 父类与子类之间的多态性。子类重新定义父类中有相同名称和参数的虚函数。1) 被重写的函数不能是 static 的。必须是 virtual 的,或者是 override 的 ( 即函数在最原始的基类中被声明为 virtual , c++ 中没有 override) 。2) 重写函数必须有相同的类型,名称和参数列表 (即相同的函数原型)3) 重写函数的访问修饰符可以不同。尽管 virtual 是 private 的,派生类中重写改写为 public,protected 也是可以的 ( 这点与 C# 完全不同 )注:一旦子类重写 阅读全文
posted @ 2012-09-09 13:47 bitbit 阅读(887) 评论(0) 推荐(0) 编辑
摘要: 下面是一个智能指针的实现,很好,可以多多采用。#ifndef SMART_PTR_H#define SMART_PTR_H//智能指针,可以加入set或map,利用其排序参数进行排序//set或map调用clear或erase会调用SmartPtr析构函数,不再被引用的数据指针会被deletetemplate <class T>class SmartPtr{ private: T* ptr; // pointer to the value 指针 long* count; // shared number of owners 计数 public: //initialize point 阅读全文
posted @ 2012-09-09 13:44 bitbit 阅读(410) 评论(0) 推荐(0) 编辑