模板类就是将类定义成模板的形式。

C++中好像不区分内部类与嵌套类两个名词。

内部类与嵌套类都是指在类中定义类。

局部类是指在函数中定义类。

(c++不能在函数中定义函数(python可以)。c++在类中定义的函数也就是成员函数。)
(c++内部类与java内部类最大的区别就是:c++的内部类对象没有外部类对象的指针,不能访问外部类对象的非静态成员;java的非静态内部类对象有外部类对象的指针,能访问外部类对象的非静态成员。
java 中右多个内部类,还有匿名内部类。

 

通过嵌套类定义自己的队列Queue:

Queue类里面嵌套一个Node类:

编写Queue.h文件:

#ifndef QUEUE_H_

#define QUEUE_H_

template<class Type>
class Queue{
private:
enum {Q_SIZE = 10};
class Node{
public:
Type data;
Node * next;
Node(const Type data) : data(data), next(0) {}
};
Node *front;
Node *rear;
int curSize;
int maxSize;
public:
Queue(int size = Q_SIZE);
~Queue();
bool isFull() const;
bool isEmpty() const ;
bool enQueue(const Type data);
bool deQueue();
void tarverseQueue() const;
};

#endif

 编写Queue.cpp文件:

#include <iostream>
#include <string>
#include <cstring>
#include <cstdlib>
#include <valarray>
#include "Queue.h"
using std::cout;
using std::endl;

template<class Type>
Queue<Type>::Queue(int size) : maxSize(size) {
front = rear = 0;
curSize = 0;
}

template<class Type>
Queue<Type>::~Queue() {
Node *tmp;
while (front != 0) {
tmp = front;
front = front->next;
delete tmp;
}
}

template<class Type>
bool Queue<Type>::isFull() const {
return curSize >= maxSize;
}

template<class Type>
bool Queue<Type>::isEmpty() const {
return curSize == 0;
}

template<class Type>
bool Queue<Type>::enQueue(const Type data) {
if (isFull()) {
return false;
}
Node *node = new Node(data);
if (front == 0) {
front = node;
} else {
rear->next = node;
}
rear = node;
curSize++;
return true;
}

template<class Type>
bool Queue<Type>::deQueue() {
if (isEmpty()) {
return false;
}
Node *tmpNode = front;
front = front->next;
delete tmpNode;
if (front == 0) {
rear = 0;
}
curSize--;
return true;
}

template<class Type>
void Queue<Type>::tarverseQueue() const {
Node *head = front;
while (head != 0) {
cout << head->data << endl;
head = head->next;
}
}

int main(int argc, char *argv[]) {
Queue<int> queue(10);
queue.enQueue(11);
queue.enQueue(12);
queue.tarverseQueue();
return 0;
}

参考资料: