深度探索C 对象模型(1)
2008-02-23 05:04:36来源:互联网 阅读 ()
读完这一章使我想到了一个很久以前看到的一个笑话,编写一个HELLO WORLD的程式,随着水平和职务的不相同,程式代码也随着变化。当初看时完全当作笑话来看,现在看来写此笑话的人水平不一般。假如要使您的代码能够最大限度的适应不同的运行环境,和最大限度的复用,则在设计和编写的过程中需要考虑的问题很多,因此代码已变的不在具备C语言的简洁,高效。而牺牲了这些优势换来的是更好的封装。当然假如您只是要打印Hello World则不必这样做了。
以C 的思维方式解决问题,对于对C语言已很熟悉的人来说会很不能适应。需要一段时间来适应,不然会将代码写的似是而非。而且不能邯郸学步,必须从思想上完全的C (OO),假如只是依葫芦画瓢,那结果很可能是用C 的语法编写C式的程式。本人曾犯的典型的低级的错误之一,就是无意识的一个类无限制的扩充,完全没有考虑到类的多层结构(基类-派生类),需要属性或方法便在类中增加,虽然也用到了多态、重载等一些OO的设计方式,但最后这个类庞大无比,除了在当前系统中任劳任怨的工作外,一点复用的可能都没有,假如另一个系统还需要一个类似的东西,那只能重新设计实现一个新的类。并且最致命的是在维护更新时带来得麻烦,需要不断全部编译不说,而且代码在用了大量注释后,在过一段时间读起来也是一件重脑力劳动。及失去了C的简洁清楚和高效,也不完全具备C 的面向对象的特性。这根本不能叫C 程式。(我想有时间重写一下以前代码也会有很多收获,温故而知新吗)C和C 在编程思想上是相互矛盾的。这也就是说假如您想学C ,完万能够不学C,只需要一本好书和一个不太笨的大脑再加上努力就能够了,假如您已有C的经验在一定的情况下反而会捣乱。
本章是对对象模型的一个大略浏览。既然我们选择了C 而不是C作为研发工具,那我们的编程思想也应该转为C 的,而不能再延续C的Procedural方式。我们必须学会C 的思考方式。采用抽象数据类型或用一个多层的class体系对数据连同数据处理函数进行封装,只有摆脱C程式的使用全局数据的惯性,才能充分发挥出C 对象模型的强大威力。
在C 中有两种数据成员static和nonstatic,连同三种成员函数static、nonstatic和virtual。C 对象模型对内存空间和存取时间做了优化,nonstatic的数据成员被置于类对象之内,而static数据成员被置于类对象之外。static和nonstatic成员函数被放在类对象之外。而virtual函数是由类对象的一个指向vtbl(虚函数表)的指针vptr来进行支持。而vptr的设定和重置由类的构造函数、析构函数连同copy assignment运算符自动完成。
我们设计的每一个类几乎都要有一个或多个构造函数、析构函数和一个Assignment运算符。他们的作用是构造函数产生一个新的对象并确定他被初始化。析构函数销毁一个对象并确定他已被适当的清理(避免出现内存泄露的问题),Assignment运算符给对象一个新值。
这是第一章的第一部分,由于雷神最近几天在做模式小组的主页,时间周转不开了。本想写完整个一章再发,考虑一下还是先发一部分吧。原因有2。1、第一章的后半部可能又要拖上10天半个月的。2、笔记实在难写,我不愿意将笔记做成将书上的重点再抄一边,而是喜欢尽量将自己的理解描述出来,谁知第一章便如此的难以消化,已反复读了3遍,还是有些夹生。所以本着对大家和自己负责的态度,雷神准备再看他3遍在说。突然发现自己的C 还差的很远,好可怕呀。
标签:
版权申明:本站文章部分自网络,如有侵权,请联系:west999com@outlook.com
特别注意:本站所有转载文章言论不代表本站观点,本站所提供的摄影照片,插画,设计作品,如需使用,请与原作者联系,版权归原作者所有
上一篇: C 中的指针(三) 智能指针
IDC资讯: 主机资讯 注册资讯 托管资讯 vps资讯 网站建设
网站运营: 建站经验 策划盈利 搜索优化 网站推广 免费资源
网络编程: Asp.Net编程 Asp编程 Php编程 Xml编程 Access Mssql Mysql 其它
服务器技术: Web服务器 Ftp服务器 Mail服务器 Dns服务器 安全防护
软件技巧: 其它软件 Word Excel Powerpoint Ghost Vista QQ空间 QQ FlashGet 迅雷
网页制作: FrontPages Dreamweaver Javascript css photoshop fireworks Flash