第9章 通用类型.doc

  1. 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
第9章 通用类型.doc

第9章 通用类型 程序员做的最常见的工作就是不断编写代码,以完成类似的任务。这个任务并不需要任何才智或者特殊的技能。这样重复的任务使得生活相当枯燥而且没有趣味。当一项任务重复了许多次时,由于任务的单调,很可能在代码中引入错误。人类并不适合重复进行相同的工作。机器可以毫无问题地做重复性的工作,而人类需要变化。所以,我们让机器进行重复性的工作,而我们自己进行更加富有挑战性和创造性的工作。 但是,在过程化编程中,要避免重复性工作是很难的。对于大多数过程化语言,我们被迫再三编写相同类型的代码。我们将使用一个简单的例子说明这些。 9.1 重复性编码问题 考虑实现一个简单列表的任务。为完整起见,让我们假设实现一个列表,用于保存TPerson对象(从第5章中的大学例子)的列表。利用C和Pascal这样的过程化语言,这将声明为: struct TPerson { /* All the details about TPerson */ TPerson* next; /* Pointer to next TPerson on the list*/ TPerson* previous; /* Pointer to previous TPerson on the lsit */ }’ 这可能是Pascal(或者C)课程的第一个练习(见图9-1)。我们将围绕这个实现而编写代码,以便在列表中增加/删除TPerson对象,在列表中查找某个TPerson等。 void AddPerson(const TPerson* thisOne); void RemovePerson(const TPerson* thisOne); 这些程序通常可以访问全局列表而且执行正确的操作。 利用OO方法,我们将改进这个方法,以创建两个分开的类((一个用于列表,另一个用于列表上的节点。我们已经在前面的章节中讨论了这种方法(参见图9-2)。 class TListNode; // forwarrd declaration class TList { pubic: TList(const void* storeThisElement); TList(const TList copy); TList operator=(const TList assign); vitual ~TList(); // How many elements are stored on the list? unsigned int HowMany () const; // Append a new node to the list (at the tail) // Return true if successful bool Append(const void* newElementToAdd); // Prepend a new node to the list(at the head) // Return true if successful bool Prepend (const void* newElementToAdd); // Does this element exist in one of the list nodes? bool Exists(const void* newElementToAdd); // Remove this element (if it exists) from the list const void* Remove(const void* elemenToRomve); // and many more methods private: TListNode* _head; TListNode* _tail; unsigned int_count; }; 图9-1 图9-2 class TListNode { public: // Constructor to create a new ListNode given user’s data TListNode(const void* userDataPointer=0); // Copy constructor etc. not shown // Remove the user’s data and return it and make the node empty const void* RemoveContent(); // Return the pointer to data of this node (object still resides // on the list) cons

文档评论(0)

snj01 + 关注
实名认证
内容提供者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档