c++类的嵌套模板
1.作用域

	如果一个嵌套类在另一个类的私有部分声明的,嵌套类对于这个类是可见的,对于外界是不可见的。
	如果一个嵌套类在另一个类的公有部分声明的,则允许在这个类和外界使用这个嵌套类。

2.访问权限

	嵌套类的私有部分不允许在声明嵌套类中的这个类访问

queuetp.h类的初始

#ifndef _QUEUETP_H_
#define _QUEUETP_H_
#include <iostream>

using std::string;
using std::cin;
using std::cout;
using std::endl;

template <class Item>
class QueueTP
{
private :
	enum {Q_SIZE = 10};

	class Node
	{
	public :
		Item item;
		Node *next;
		Node(const Item & i) : item(i),next(0) { }
	};
	Node * front;
	Node * rear;
	int items;
	const int qsize;
	QueueTP(const QueueTP & q) : qsize(0) { }
	QueueTP & operator=(const QueueTP & q) { return *this; }
public:
	QueueTP(int qs = Q_SIZE);
	~QueueTP();
	bool isempty() const
	{
		return items == 0;
	}
	bool isfull() const
	{
		return items == qsize;
	}
	int queuecount() const
	{
		return items;
	}
	bool enqueue(const Item &item);
	bool dequeue(Item &item);
};

//构造函数
template <class Item>
QueueTP<Item>::QueueTP(int qs) : qsize(qs)
{
	front = rear = 0;
	items = 0;
}

//析构函数
template <class Item>
QueueTP<Item>::~QueueTP()
{
	Node * temp;
	while(front != 0)
	{
		temp = front;
		front = front->next;
		delete temp;

	}
}

//添加一个Node
template <class Item>
bool QueueTP<Item>::enqueue(const Item & item)
{
	if( isfull() )
		return false;
	Node * add = new Node(item);
	items++;
	if( front == 0)
	{
		front = add;
		cout << "第一个成员是:"<< front->item <<endl;
	}
	else
		rear->next = add;
	rear = add;
	return true;
}

//将前面item放入item的变量中并从queue中移除
template <class Item>
bool QueueTP<Item>::dequeue(Item & item)
{
	if(front == 0)
		return false;
	item = front->item;
	items--;
	Node * temp = front;
	front = front->next;
	delete temp;
	if(items == 0)
		rear = 0;
	return true;
}

#endif

nested.cpp调用

#include<string>
#include "queuetp.h"

int main()
{

	QueueTP<string> cs(5);
	string temp;

	while( !cs.isfull())
	{
		cout << "请输入你的名字\n";
		cout << "name: ";
		getline(cin,temp);
		cs.enqueue(temp);
	}
	cout << "队列满\n";
	while (!cs.isempty())
	{
		cs.dequeue(temp);
		cout << "队列移除" << temp << "...\n";
	}
	return 0;
}

makefile

CC = g++
objects = nested.o
program:$(objects) 
	$(CC) -o program $(objects) 
clean:
	rm -rf *.o program

运行结果:
在这里插入图片描述

Logo

腾讯云面向开发者汇聚海量精品云计算使用和开发经验,营造开放的云计算技术生态圈。

更多推荐