浅谈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(...);
//
相关文档:
Boss说,要看OpenGL,看了快一个月,总算出了个像样的东西,用C写了个3D迷宫,
虽然只有350行
代码,不过边学边写,足足写了一周时间,还是小有成就感的,活活活!
&n ......
偶然的因素,对const来了点兴趣,做了一下实验:
1. 语法:const、指针
在gcc中, 对于C语言,下面的语句是合法的:
const int a=0;
int *p=&a;
而C++中,需要手工强制转换才能编译通过:
......
C/C++语言void及void指针深层探索
1.概述
许多初学者对C/C++语言中的void及void指针类型不甚理解,因此在使用上出现了一些错误。本文将对void关键字的深刻含义进行解说,并详述void及void指针类型的使用方法与技巧。
2.void的含义
void的字面意思是“无类型”,void *则为“无类型指针”,void ......
写Unmanaged Code在.NET时代成为一种很悲惨的事,当你需要处理XML文件时,这种感觉会变得尤其强烈。FCL中的System.XML多简单啊,连Steve Ballmer都知道怎么用。
事情不会总是那么理想的,假如你要在C/C++程序里处理XML怎么办呢?
选择一:市面上的XML lib还是有几个的,最有名的当然是libXML。我一年前用过,很不错,我还 ......
目的:当程序在前台运行时,按挂机键程序不退出,只是退到后台运行,程序在后台运行时,按c键能把程序结束
方法:在HandleWsEventL()中屏蔽挂机键KAknUidValueEndKeyCloseEvent,在值在avkon.hrh中定义,实践中发现8.0sdk的avkon.hrh没有定义KAknUidValueEndKeyCloseEvent,唯有手工添加定义#define KAknUidValueEndK ......