面向对象程序设计习题

loading 分享 2026-8-25 下载文档

.

/***************** 定义模板类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教育资料


面向对象程序设计习题.doc 将本文的Word文档下载到电脑
搜索更多关于: 面向对象程序设计习题 的文档
相关推荐
相关阅读