banner

Node *pi=m_header;  //定位到链表头

//记录第i个结点的前驱地址Node *p_ahead;

tips

Node *p_rear;   //记录第i个结点的后继地址

for(int i=1;i<=k;i++) //通过循环定位到第k个元素

{

p_ahead=pi;

pi=pi->next;

p_rear=pi->next;

}

//现在pi就是k结点的地址

p_ahead->next=p_rear;

delete pi;

return true;

}

//清空链表

template<clas给用户。

22.3.4 初步类设计

通过对邮件的分析,您决定设计一个Message类。考虑到以后可能拓展该程序,使其支持其他信息,您决定从抽象基类Message派生出EmailMessage类,再从EmailMessage派生出PostMasterMessage、InterchangeMessage、LotusMessage、GmailMessage等类。

在处理电子邮件的程序中,创建Message类是显而易见的,但确定复杂系统需要使用的对象是面向对象编程的最大挑战。在有些情况下,只要对问题有深入认识,就能确定主要的对象,但更常见的情形是,必须对要完成的任跟踪的3种基本属性。为了方便,这里再次列出了这些属性:

● 信息存储在何处。

● 存储的值为多少。

● 存储的信息是什么类型。

已经使用过一种策略来达到上述目的:定义一个简单变量。声明语句指出了值的类型和符号名,还让程序为值分配内存,并在内部跟踪该内存单元。

下面来看一看另一种策略,它在开发C++类时非常重要。这种策略以指针为基础,指针是一个变量,其存储的是值的地址,而不是值本身。在讨论指针之前,我们先看一看如何找到常规变量的地址。只需对变量应用地址操作符(&),就可以获得它的位置;例如,如果home是一个变量,则&home是它的地址。 程序清单4.14演示了这个