1. C++ 拷贝构造函数被调用的情形:

1)已存在对象初始化新创建的对象;

2)类对象作为形参,接受实参值;  原理:栈中创建的局部对象;

3)函数返回值为类对象;原理:创建的临时返回对象;

2. 两种重要的数据结构在具体实现上的问题总结(在此先仅讨论它们的链式表示)

1)链队列

  首先明确队列进出元素的特点:队头删除结点,队尾插入结点,所以下面的函数操作在实现上一定要体现这一点;

  具体实现说明:为了操作方便起见,给链队列添加一个头结点,并令头指针指向头结点,那么队头结点即是头结点指向的结点。

  空队列:头指针和尾指针均指向头结点,头结点指针域的值指向NULL;这一点可以作为将队列清为空队列的依据。

  销毁队列:释放所有的结点,即一个结点都不留,注意最后头尾指针均指向NULL;

  清空队列:是将队列置为空,最后保留头结点。

 

2)链栈

  明确栈进出元素的特点:先进后出,只能从栈顶(一端)进入或删除元素;故其函数操作实现上同样要依据这一条件;

  实现说明:这里栈的链式表示由数据结点、栈顶指针和栈底指针表示,链栈无头结点;

  DestroyStack 销毁栈:一个结点都不留,从栈顶开始,一个个释放结点,直至栈尾;

  ClearStack 把链栈置为空栈:首先说明,最终要保留栈顶top所指向的结点(该结点数据域并未使用,即没有赋值),从栈顶结点的下一个结点开始释放,直至释放栈底指针;最终top和base指向同一个结点。