概括C++代码详解

许多编程人员学习C++代码总结经验为,有的觉得C++语言是一门独立的语言,并不是在C语言的基础上,可以直接学习C++不必先从C下手,但是有的人就觉得C++这款编程语言不如人意。

谁也说不清C++代码究竟能衍生出多少种迥异的风格,但我知道,有许多C++初学者在面对不同风格的C++代码时,经常会误以为自己看到的是好几种完全不同的编程语言――仅此一点就足以提醒我们,研究和廓清C++语言风格的演化和发展规律已是当务之急了。

和文体学家们研究历朝历代文体变迁的工作相仿,研究C++语言风格的流变史也没有什么捷径可走。我们只能依据刘勰在《文心雕龙》中提倡的“原始以表末”[1]的研究方法,循着历史的脉络,推求代码风格的来源,探寻风格演化的内因,并借以阐明技术发展的趋势和规律。

1.带类的C――对C语言风格的因袭 
在1983年12月BjarneStroustrup采纳RickMascitti的建议,将其发明的新语言命名为“C++”之前,人们一直用“带类的C(CwithClasses)”来称呼这种脱胎于C语言的,带有数据抽象机制的“方言”。虽然带类的C在本质上仅仅是一种可以被预处理程序Cpre转换为传统C语言代码(这类似于我们在Oracle中见到的Pro*C语言的预处理过程)的扩展性语言,但它的确在风格上奠定了后来所有C++代码的基础。

class stack {  


char s[SIZE];  


char* min;  


char* top;  


char* max;  


void new();  


public:  


void push(char);  


char pop();  


};  

这段“带类的C”代码录自Stroustrup所著的《C++语言的设计和演化》。代码中的new()其实是类stack的构造函数,这与后来的C++语言有很大的不同。显而易见,带类的C在风格上几乎完整地承袭了C语言的衣钵。代码中的声明语句看上去与C语言一模一样,class的结构也与C语言中struct的结构大致相仿。

这些迹象反映出C++语言来源于C又尽量与C保持兼容的设计思想――这种设计思想既为C++的迅速普及提供了便利(C++语言的顺利推广显然得益于C语言已有的庞大用户群),也在C++的语言风格中深深地烙上了C语言的印记,以至于在若干年后,当C++语言已经基本具备了“独立人格”的时候,Stroustrup还不得不时常提醒人们要尽量抛开C语言的思维方式。

另一方面,Stroustrup从Simula语言借用的类、派生、访问控制等面向对象概念在带类的C中牢牢地扎下了根。据Stroustrup介绍,他为C语言引入面向对象机制的本意在于寻找一种“合适的工具”[2],以便实现分布式系统或解决类似的复杂问题。

但无论怎样,Stroustrup将C的高效和Simula的优雅捆绑在一起的做法都在事实上为C++语言埋下了“双重性格”的种子――很难说这不是C++语言风格多样化的直接诱因。

2. I/O流――C++的新形象
如果说C++语言的生身父母分别是C语言和Simula语言的话,那么,1984年出现的,借助操作符重载实现的I/O流技术就是C++这个幼童甩开父母的庇护,向新的代码风格迈出的第一步了。

class TGDIDemoWindow : public TMDIFrame  


{  


public:  


TGDIDemoWindow( LPSTR ATitle, LPSTR MenuName )  


: TMDIFrame(ATitle, MenuName) {};  


virtual void SetupWindow();  


virtual void ArtyDemo( TMessage& ) =[CM_FIRST + ArtyDemoID];  


virtual void Quit( TMessage& ) =[CM_FIRST + QuitID];  


virtual void WMTimer( TMessage& ) =[WM_FIRST + WM_TIMER];  


virtual void WMDestroy( TMessage& ) =[WM_FIRST + WM_DESTROY];  


};  

相关推荐