c++——类的嵌套
c++类的嵌套模板1.作用域如果一个嵌套类在另一个类的私有部分声明的,嵌套类对于这个类是可见的,对于外界是不可见的。如果一个嵌套类在另一个类的公有部分声明的,则允许在这个类和外界使用这个嵌套类。2.访问权限嵌套类的私有部分不允许在声明嵌套类中的这个类访问queuetp.h类的初始#ifndef _QUEUETP_H_#define _QUEUETP_H_#include <iostream&
·
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
运行结果:
更多推荐
所有评论(0)