06 2009 档案
摘要:常用的面向对象复用模型设计、常用的数据结构设计、常用的操作系统知识、内存管理、多线程互斥,然后能够很轻松的应用现有的软件模块和开发库,比如用开源的库(例如log4cpp),购买的其他公司的接口模块等,能够和容易上手应用一个你从未涉足的开发平台(比如从vc转到symbian,转到qt),开发令老板比较满意的程序模块. 十足的自信心+强烈的求知欲+对Programming&&CPP的执着+百折不挠的钻研精神+数据结构&算法基础+操作系统基础+CPP语法基础 OK,你已经超越了精通C++的境界精通并不是说要你什么都懂,都会。那也是也是不可能达到的,毕竟技术是在不停发展的。而是
阅读全文
摘要:class A{public: A(int x):i(x) {} void foo() { cout<<"A"<<endl; }protected: int i;};class B : public A{public: B(int x, int y):A(x), i(y) {} void foo() { cout<<"B"<<endl; } void display() { cout<<A::i + i<<endl; }private: int i;};int main(){ A a
阅读全文
摘要:#include <iostream>using namespace std;template<class T>class Test{public: friend ostream& operator << <> (ostream& out, const Test<T>& obj); Test(T n=0):num(n){} Test(const Test<T>& copy) { num = copy.num; }private: T num;};template<class T>
阅读全文
摘要:第一章1. = 不等于 ==2. & | 不同于 && ||3. 词法分析中的贪心法a---b与a-- - b的含义一样c语言词法分析规则:每个符号应该包含尽可能多的字符,也即:从左到右一个字符一个字符的读入,如果该字符可能组成一个符号,那么再读入下一个字符,如果不能则停止,将已经读入的可以构成运算符的几个字符作为一个运算符。a+++++b的意义是a++ ++ + b 虽然词法分析是这样,但是a++ 不可以作为++运算的左值,所以这个表达式编译会报错。4. 整型常量如果第一个字符数字是0,那么该常量被视作八进制。5. C语言中,单引号括起来的字符实际上代表一个整数,也就
阅读全文
摘要:先看一个例子:char* GetMemory(int num){ return new char[num];}int main(){ char* str = GetMemory(10); char tmp[10]; /* 虽然str和tmp的空间大小都为10,但是: The strcpy function copies strSource, including the terminating null character, to the location specified by strDestination. No overflow checking is performed whe...
阅读全文
摘要:电子计算机能以极高速度进行信息处理和加工,包括数据处理和加工,而且有极大的信息存储能力。数据在计算机中以器件的物理状态表示,采用二进制数字系统,计算机处理所有的字符或符号也要用二进制编码来表示。用二进制的优点是容易表示,运算规则简单,节省设备。人们知道,具有两种稳定状态的元件(如晶体管的导通和截止,继电器的接通和断开,电脉冲电平的高低等)容易找到,而要找到具有10种稳定状态的元件来对应十进制的10个数就困难了。二进制数的基数是2,只有0和1两个数字,逢2进1。十进制数有0,1,…9十个数字,逢10进1。因为二进制最简单,只有0和1,计算的速度也是最快的,和计算机追求的速度不谋而合,而十六进制,
阅读全文
摘要:在设计过程中给类,方法和函数好的命名会带来好的设计,虽然这不是一定成立,但是如果坏的命名那一定不会给你带来好的设计。在设计过程,如果你发现你很难命名某一个模块,某个方法时,可能你真正遇到的问题不是难命名的问题,而是这个设计是否真的合理,你或许应该花更多的时间来重新设计一下你的模块。好的命名不仅会带来好的设计,好的命名还提高了程序的可读性,降低代码维护的成本。另一方面,如果糟糕的命名会给代码带来一堵无形的墙,让你必须深入代码去研究代码具有的行为,增加你理解代码的时间。为此我总结了几条关于命名的指导原则,希望这几条原则能为你的命名设计带来帮助,我使用的是C++的语法,当然这些原则也很容易扩展到其他
阅读全文
摘要:一.内存对齐的初步讲解内存对齐可以用一句话来概括:“数据项只能存储在地址是数据项大小的整数倍的内存位置上”例如int类型占用4个字节,地址只能在0,4,8等位置上。例1:#include <stdio.h>struct xx{ char b; int a; int c; char d;};int main(){ struct xx bb; printf("&a = %p/n", &bb.a); printf("&b = %p/n", &bb.b); printf("&c = %p/n"
阅读全文
摘要:for语句的执行顺序2007-09-08 10:58Theforstatement is written:for(e1;e2;e3)statementFirst,e1, usually an assignment statement, is executed. Thene2, usually a comparison, is evaluated. Iffalse, the for-loop terminates. Iftrue,statementis executed. Finally,e3, usually an assignment statement, is executed, and
阅读全文
摘要:#include <fstream>#include <vector>using namespace std;int main(){ ifstream ifs; ifs.open("1.txt"); if(ifs == NULL) return; vector< vector<int> > vec; vector<int> vec_tmp; int tmp; int i = 0; while (ifs.good()) { ++i; ifs>>tmp; vec_tmp.push_back(tmp); if
阅读全文
摘要:这7种结构型设计模式是下面7种:Adapter 适配器模式 Bridge 桥接模式 Composite 组合模式 Decorator 装饰模式 Facade 外观模式 Flyweight 享元模式 Proxy 代理模式 对比:Adapter模式主要应用于“希望复用一些现存的类,但是接口又与复用环境要求不一致的情况” ,在遗留代码复用、类库迁移等方面非常有用。 Bridge模式的应用一般在“两个非常强的变化维度”。Bridge模式使用“对象间的组合关系”解耦了抽象和实现之间固有的绑定关系,使得抽象和实现可以沿着各自的维护来变化。 Composite模式采用树形结构来实现普遍存在的对象容器,从而将
阅读全文
摘要:#ifndef COMPOSITE_H_#define COMPOSITE_H_#include <list>// 提供接口的抽象基类class Component {public: Component() {} virtual ~Component () {} /* 因为Component的每个子类无论是Leaf还是Composite都必须实现自己版本的 operation()函数,所以定义为纯虚函数。 */ // 纯虚函数只提供接口不提供默认实现 virtual void operation() = 0; /* 因为下面这几个函数只有Composite类才实现自己的版本, 而L
阅读全文
摘要:Google C++编程风格指南(一):头文件 【本文】Google C++编程风格指南(二):作用域Google C++编程风格指南(三):C++ 类Google C++编程风格指南(四):智能指针和其他C++特性Google C++编程风格指南(五):命名约定Google C++编程风格指南(六):代码注释Google C++编程风格指南(七):格式Google C++编程风格指南(八):规则之例外背景 Google的开源项目大多使用C++开发。每一个C++程序员也都知道,C++具有很多强大的语言特性,但这种强大不可避免的导致它的复杂,这种复杂会使得代码更易于出现bug、难于阅读和维护..
阅读全文
摘要:第一组 1.烧一根不均匀的绳,从头烧到尾总共需要1个小时。现在有若干条材质相同的绳子,问如何用烧绳的方法来计时一个小时十五分钟呢? 2.你有一桶果冻,其中有黄色、绿色、红色三种,闭上眼睛抓取同种颜色的两个。抓取多少个就可以确定你肯定有两个同一颜色的果冻? 3.如果你有无穷多的水,一个3公升的提捅,一个5公升的提捅,两只提捅形状上下都不均匀,问你如何才能准确称出4公升的水? 4.一个岔路口分别通向诚实国和说谎国。来了两个人,已知一个是诚实国的,另一个是说谎国的。诚实国永远说实话,说谎国永远说谎话。现在你要去说谎国,但不知道应该走哪条路,需要问这两个人。请问应该怎么问? 5.12...
阅读全文
摘要:是关于统一建模语言、即UML 里采用的基本图的文章。在这篇文章中,我将会讨论结构图,这是已经在 UML 2中提出的一种新图种类。由于本系列文章的目的是使人们了解记号元素及它们的含意,该文主要关注类图。你很快就会知道这样做的理由。随后的文章将会覆盖结构范畴中包含的其它图。我也想提醒读者,这一系列文章是关于 UML记号元素的,所以这些文章并不意味着为建模的最好方式提供指导方针,或是该如何决定哪些内容应该首先被建模。相反的,该文及本系列文章的目的主要是帮助大家对于记号元素 -- 语法和含义有一个基本的理解。借由这些知识,你应该可以阅读图,并使用正确的记号元素创建你自己的图。这篇文章假定你对面向对象的
阅读全文
摘要:“又是一年毕业时”,看到一批批学子离开人生的象牙塔,走上各自的工作岗位;想想自己也曾经意气风发、踌躇满志,不觉感叹万千……本文是自己工作6年的经历沉淀或者经验提炼,希望对所有的软件工程师们有所帮助,早日实现自己的人生目标。本文主要是关于软件开发人员如何提高自己的软件专业技术方面的具体建议,前面几点旨在确定大的方向,算是废话吧。谨以此文献给那个自己为你奉献3年青春与激情的开发团队。还有团队成员:PPL、YT、YK 、TYF、LGL、CHL、CDY、CB、DPD。 1、 分享第一条经验:“学历代表过去、能力代表现在、学习力代表未来。”其实这是一个来自国外教育领域的一个研究结果。相信工作过几年、十几
阅读全文
摘要:我们期待自己成为一个优秀的软件模型设计者,但是,要怎样做,又从哪里开始呢? 将下列原则应用到你的软件工程中,你会获得立杆见影的成果。 1. 人远比技术重要 你开发软件是为了供别人使用,没有人使用的软件只是没有意义的数据的集合而已。许多在软件方面很有成就的行家在他们事业的初期却表现平平,因为他们那时侯将主要精力都集中在技术上。显然,构件(components),EJB(Enterprise JavaBeans)和代理(agent)是很有趣的东西。但是对于用户来说,如果你设计的软件很难使用或者不能满足他们的需求,后台用再好的技术也于事无补。多花点时间到软件需求和设计一个使用户能很容易理解的界面上。
阅读全文
摘要:#ifndef DECORATOR_H_#define DECORATOR_H_#include "iostream"using namespace std;/* 接口的一致性:装饰对象的接口必须和他所装饰的Component的接口 是一致的。因此,所有的ConcreteDecorator类必须有一个公共的接口*/// 抽象基类定义一个对象接口,可为这个接口动态的添加职责class Component {public: Component() {} virtual ~Component() {} // 纯虚函数 virtual void operation() = 0;};
阅读全文
摘要:#ifndef LINKLIST_H_ #define LINKLIST_H_ struct Node { Node* ptr_; int data_; Node():ptr_(0), data_(0) {} Node(int i):ptr_(0), data_(i) {} }; class Lin
阅读全文