1.将队列数组视为循环则可以避免移动首元素就改变后面元素的位置,采用链表就可以很好的满足队列的要求。
struct Node { Item item; struct Node * next; };
这个是结点的结构体。
2.在类中嵌套结构体,类,或枚举,其作用域尾整个类,声明不会创建对象。
class Queue { private: struct Node { Item item; struct Node * next; }; .........
3.对于类私有元素为const类型的时候,可以对变量初始化但是不能对其赋值。这个时候调用构造函数对类数据对象进行初始化的时候就不能在代码块里面进行赋值,而只能采用初始化列表的方式去初始化。
class Queue { private: struct Node { Item item; struct Node * next; }; enum { Q_SIZE = 10 }; Node *front; Node *rear; int items; const int qsize; Queue(const Queue &q):qsize(0) {} Queue & operator =(const Queue &q) { return *this; } public:
对于上述初始化列表方式,在类方法中只能用于构造函数。必须使用这种语法的有const类成员和被声明为引用的类成员。这是因为引用与const数据类似,只能在被创建的时候进行初始化。对于本身就是类对象的成员来说,使用成员初始化列表效率更高。
注意;不能将成员初始化列表语法用于构造函数之外的其他类方法。
4.为什么加显示析构函数,是因为删除结点并不能保证在运行完程序后队列为空,所有必须加显示析构函数运算符。
5.为什么将显示复制构造函数和重载赋值运算符函数权限设置为私有,是因为规定这个类不能进行拷贝和赋值运算,也不会提供默认复制构造函数。这种方法被称为伪私有方法。