当前位置:首页 > 面向对象程序设计习题
.
/***************** 定义模板类QueueItem ************/ template class QueueItem { public:
QueueItem(const Type & elem):item(elem) {} QueueItem() {} private: Type item;
QueueItem * nextItem; friend class Queue; };
/***************** 定义模板类Queue ************/ template class Queue { public:
Queue():front( NULL), ____(A)_____ {} ~Queue(); Type remove();
void add(const Type &);
bool is_empty() const { return ____(B)______ ; private:
QueueItem *front; QueueItem *back;
word教育资料
} .
};
//模板类Queue的函数成员remove()的实现 //从队列头取出一个节点,并返回该节点的值 template
Type Queue::remove() {
QueueItem *pFront; //指向头节点的临时指针 Type retVal; //返回值 ______(C)_________; retVal = front->item; front = front->nextItem; delete pFront; return retVal; }
//模板类Queue的函数成员add()的实现 template
void Queue::add(const Type & newItem) {
QueueItem *pNew = new QueueItem; pNew->item = newItem; ______(D)____________; if (front == NULL) front = back = pNew; else
word教育资料
.
{
back->nextItem = pNew; _____(E)__________; } } template Queue::~Queue() {
QueueItem *p = front, *q; while(p != NULL) {
q = p->nextItem; delete p; p = q; } }
问题1: 程序中有几处填空,将它们完成。 (A)back(NULL)
(B)front == NULL 或 back == NULL (C)pFront = front (D)pNew->nextItem = NULL (E)back = pNew
word教育资料
.
问题2:()题中程序第1,2行为什么要说明一下类模板Queue?如果没有这两行语句,程序还正确吗?
答:不正确。因为在类QueueItem模板类的定义中用到了模板类Queue,而此时Queue还没有定义,所以要先声明一下,告诉编译程序Queue是一个模板类,它将在程序的其他地方定义。如果没有这个说明,编译程序就不知道标识符Queue代表什么样的含义了。
问题3:程序第22,23行各有一个const,它们各自表示什么含义: 答:第22行的const修饰的是函数的参数,表示在这个函数体中不能改它所修饰的参数所对应的实际参数的值。
第23行的const修饰的是模板类Queue的成员函数is_empty(),它表示在函数is_empty()的函数体中不能改变任何数据成员的值。
问题4:程序中模板类Queue的析构函数主要做了什么事情?为什么要这么做?
答:析构函数中主要是释放链表中存放的各个节点的空间。因为Queue对象在其生存期间可能加入了很多节点,从堆中申请了一些内存空间,这些空间应该随着对象的消亡而释放掉,所以需要在析构函数中来释放这些空间。
问题5:下面的程序使用了queue.h文件中定义的类模板,说明程序中哪些定义队列对象的语句是不正确的,哪些是正确的。 #include “queue.h” void main() {
Queue q1; // 1 Queue q2; // 2 Queue q3(100); // 3
word教育资料
共分享92篇相关文档