易截截图软件、单文件、免安装、纯绿色、仅160KB

浅谈C与C++的设计与编程风格(一)

一直想写一些比较C和C++设计与编程风格的文字,正好近来工作任务不多,能够有时间重新整理一下自己所学的东东,于是便决定开始写这个题目,而目的仅仅只是打算能就这个话题和大家讨论讨论,抛砖引玉、增长个人的见识。
首先想说明一下,个人是C++设计、编程风格的坚定拥护者,所以我的观点难免带有个人的偏好,如果您不赞同,也请批评指正。好了,言归正传,个人觉得C与C++设计与编程风格最本质的不同是:C以函数间的调用关系为核心(所以C语言被称为面向过程式语言),而C++以程序元素(对象)间的关系和结构为核心(所以C++被称为面向对象的语言)——PS:如果您拿到一堆代码后首先去看各个函数的实现,并试图弄懂它们是如何相互调用的,那证明您是一位典型的C程序员;而如果您首先是去查看所有头文件,并试图搞懂每个类之间的关系,那证明您是一位典型的C++程序员。
举个简单的例子,对于一名C程序员,当他需要实现某种状态机时,通常是使用下面这样的代码:
if (0 == CheckState(...) ) // 判断某个函数的返回值是否为0
    DoSomething(...); // 调用某个函数
else
    DoSomethingElse(...); // 调用处理其它情况的另一个函数
或是这样:
switch( CheckState(...) ) // 根据某个函数的返回值做不同的动作
{
case 0:
    DoSomething1(...);
    break;
case 1:
    DoSomething2(...);
    break;
case -1:
    DoSomething3(...);
    break;
default:
    DoSomethingElse(...);
}
(PS:以上这些代码必然是在源文件的某个函数中出现的,这也解释了为什么C程序员总是先看源文件。)而一个C++程序员则可能不这么做,这里C++程序员多了一种选择——使用虚函数:
//申明一个接口
struct IStateMachine
{
virtual void DoSomething(...) = 0;
};
// 针对状态0提供一个实现类
struct CDoSomethingForState0: IStateMachine
{
virtual void DoSomething(...);
}
// 针对状态1提供一个实现类
struct CDoSomethingForState1: IStateMachine
{
virtual void DoSomething(...);
};
// 针对其它状态提供一个实现类
struct CDoSomethingForOhterStates: IStateMachine
{
virtual void DoSomething(...);
};
// 使用一个工厂函数来返回特定的实现对象
IStateMachine * CheckState(...);
//


相关文档:

用C写的3D迷宫

          Boss说,要看OpenGL,看了快一个月,总算出了个像样的东西,用C写了个3D迷宫,
虽然只有350行
       代码,不过边学边写,足足写了一周时间,还是小有成就感的,活活活!
         &n ......

C/C++语言void及void指针深层探索

C/C++语言void及void指针深层探索
1.概述
许多初学者对C/C++语言中的void及void指针类型不甚理解,因此在使用上出现了一些错误。本文将对void关键字的深刻含义进行解说,并详述void及void指针类型的使用方法与技巧。
2.void的含义
void的字面意思是“无类型”,void *则为“无类型指针”,void ......

C++中extern “C”含义深层探索

1.引言
  C++语言的创建初衷是“a better C”,但是这并不意味着C++中类似C语言的全局变量和函数所采用的编译和连接方式与C语言完全相同。作为一种欲与C兼容的语言,C++保留了一部分过程式语言的特点(被世人称为“不彻底地面向对象”),因而它可以定义不属于任何类的全局变量和函数。但是,C++毕 ......

C++中处理XML文件

写Unmanaged Code在.NET时代成为一种很悲惨的事,当你需要处理XML文件时,这种感觉会变得尤其强烈。FCL中的System.XML多简单啊,连Steve Ballmer都知道怎么用。
事情不会总是那么理想的,假如你要在C/C++程序里处理XML怎么办呢?
选择一:市面上的XML lib还是有几个的,最有名的当然是libXML。我一年前用过,很不错,我还 ......

The meaning of the c in calloc

The meaning of the c in calloc was vividly discussed in comp.lang.c in October 2000 (see here), with both clear (because, unlike malloc, calloc clears the memory it returns) and count (because, unlike malloc, calloc is passed a count of elements to allocate) suggested as possible explanations, howev ......
© 2009 ej38.com All Rights Reserved. 关于E健网联系我们 | 站点地图 | 赣ICP备09004571号