1.纯虚函数与抽象类
1.1纯虚函数
首先:强调一个概念
定义一个函数为虚函数,不代表函数为不被实现的函数。
定义他为虚函数是为了允许用基类的指针来调用子类的这个函数。
定义一个函数为纯虚函数,才代表函数没有被实现。
定义纯虚函数是为了实现一个接口,起到一个规范的作用,规范继承这个类的程序员必须实现这个函数。

1.2抽象类
类似Java中抽象方法与抽象类的区别,只是在基类中说明,具体实现交给派生类。


1.3应用抽象类建立栈与队列
两种类型的表(list):栈与队列。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96
| #include <iostream> #include <cstdio> using namespace std; class list{ public: list* head; list* tail; list* next; int num; list(){ head=tail=next=NULL; } virtual void store(int i) = 0; virtual int retrieve() = 0; }; class queue:public list{ public: void store(int i); int retrieve(); }; void queue::store(int i){ list* item; item = new queue; if (!item){ cout << "Allocation error\n"; exit(1); } item->num = i; if (tail) tail->next = item; tail = item; item->next = NULL; if (!head) head = tail; } int queue::retrieve(){ int i; list* p; if (!head){ cout << "list empty\n"; return 0; } i = head->num; p = head; head = head->next; delete p; return i; } class stack:public list{ public: void store(int i); int retrieve(); }; void stack::store(int i){ list* item; item = new stack; if (!item){ cout << "Allocation error\n"; exit(1); } item->num = i; if (head) item->next = head; head = item; if (!tail) tail = head; } int stack::retrieve(){ int i; list* p; if (!head){ cout << "list empty\n"; return 0; } i = head->num; p = head; head = head->next; delete p; return i; } int main(){ list* p; queue q_ob; p = &q_ob; p->store(1); p->store(2); p->store(3); cout << "queue:"; for (int i = 0;i < 3;i ++) cout << p->retrieve(); cout << '\n'; stack s_ob; p = &s_ob; p->store(1); p->store(2); p->store(3); cout << "stack:"; for (int i = 0;i < 3;i ++) cout << p->retrieve(); cout << '\n'; return 0; }
|