- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 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)