继承与多态的应用:通用链表的实现

    xiaoxiao2025-01-27  12

    继承与多态的应用:通用链表的实现

    1.掌握继承与多态

    2.掌握纯虚函数与抽象类以及接口的含义

    3.通过多态的形式,建立与类型无关的通用链表

    <span style="font-size:18px;">#include <iostream> #include <assert.h> using namespace std; class Object { public: Object() {} virtual ~Object() {} public: virtual void Print()const = 0; //接口 }; class List; class ListNode { friend class List public: ListNode() { data = NULL; next = NULL; } ListNode(Object *pobj) { data = pobj; next = NULL; } ~ListNode() { delete data; } private: Object *data; //父类类型作为子类的接口类型 ListNode *next; }; class List { public: List() { Head = Tail = new ListNode; } ~List() { ListNode *p = Head->next; while(p != NULL) { Head->next = p->next; delete p; p = Head->next; } delete Head; Head = Tail = NULL; } public: void Push_Back(Object *pb) { ListNode *s = new ListNode(p); assert(s != NULL); Tail->next = s; Tail = s; } void PrintList()const { ListNode *p = Head->next; while( p != NULL) { p->data->Print(); p = p->next; } cout<<"Nul."<<endl; } private: ListNode *Head; ListNode *Tail; }; 1.int类型 class IntObject : public Object { public: IntObject(int d = 0):data(0) {} ~IntObject() { cout<<"Free Int Object"<<endl; } public: void Print()const { cout<<data<<"-->"; } private: int data; }; 2.string类型 class StringObject : public Object { public: StringObject(const char *str) { if(str == NULL) { data = new char[1]; data[0] = '\0'; } else { data = new char[strlen(str)+1]; strcpy(data,str); } } ~IntObject() { delete []data; data = NULL; cout<<"Free String Object!"<<endl; } public: void Print()const { cout<<"\""<<data<<"\""<<"-->"; } private: char *data; }; int main() { List mylist; for(int i = 1; i <= 5; ++i) { IntObject *pi = new IntObject(i); mylist.Push_Back(pi); } mylist.PrintList(); List youlist; char *str[] = {"xsy","sfds","sdfsf","sfdsfs","sdfsf"}; for(int j = 0; j < 5; ++j) { StringObject *ps = new StringObject(str[j]); youlist.Push_Back(ps); } youlist.PrintList(); return 0; }</span>

    转载请注明原文地址: https://ju.6miu.com/read-1295832.html
    最新回复(0)