1. 程式人生 > >c++類編程的兩個簡單的例子

c++類編程的兩個簡單的例子

function pointer efi AI == TP 數據 IT empty

關於棧的數據結構:
類的頭文件定義

//              stack.h  -- class definition for the stack 
/******************************************************************/
#ifndef _STACK_
#define _STACK_

typedef unsigned long Item ;

class Stack 
{
private:
            enum { MAX = 10 } ;
            Item items[MAX] ;
            int top ;
public:
            Stack();
            bool isempty() const ;
            bool isfull() const ;
            bool push( Item & item );
            bool pop(  Item & item );
};
#endif

關於具體實現的部分:

//        implement for the stack.h          //
/**********************************************
never let  the implement file has the 
  cin  and cout  opeoration , just let 
class func opers its own private data !
*********************************************/
#include "stack.h"

Stack::Stack(){
  top = 0 ;
}

bool Stack::isempty() const{
  return top == 0 ;
}

//  the const is needed to be added to the implement part 

bool Stack::isfull() const{
  return top == 10 ;
 }

bool Stack::push( Item & item){
if( top < MAX ){
    items[top++] = item ;
    return true ;
     }
   else
              return false ;
}

bool Stack::pop(Item & item){
if( top == 0 )
    return false ;
else{
    item = items[--top];
    return true ;
   }
}

測試部分:

#include "stack.h"
#include<iostream>

int main(){
int i ;

Item item = 8729 ;
Item get ;
Stack stack;

for ( i = 0 ; i < 15 ; i++ )
    stack.push(item);
for( i = 0 ; i < 15 ; i++ )
    {
        if(stack.pop(get))
        std::cout<<get<<std::endl;
    }

}

關於列表的實現,可以加入不同的數據類型的列表

聲明的頭文件:

#ifndef _list_
#define _list_
#include <stdio.h>
typedef struct elem{
    char type ;
        union
        {
                int   int_ ;
                short shrt_;
                char  char_;
                void * ptr ;
                double double_;
                float float_;  
            }value;
        elem * next ;
        elem * fore ;
}Elem;

class List{
private:
                enum { INT , SHRT , CHR , PTR , DOU , FLT };
                unsigned int count ;
                elem * head ;
                elem * tail ;
public:
                List(){ count = 0 ; head = tail = NULL ;}
                bool push(Elem & item );
                bool pop (Elem & item );
                bool insert( int pos , Elem & item );
                bool purge ( int pos , Elem & item );
                bool getpos( int pos , Elem & item );
                bool isempty();
                void reverse();
                void show() const;
                ~List();
};
#endif

具體實現的文件:

#include "list.h"
#include<iostream>
#include<stdio.h>

void innershow(Elem * ptr)
{
        printf("  in function \n");
        std::cout<<"Type:";
        switch (ptr->type){
        case(0):  printf("int     value:%d\n",ptr->value);    break;
        case(1):  printf("short   value:%d\n",ptr->value);    break;
        case(2):  printf("char    value:%c\n",ptr->value);    break;
        case(3):  printf("pointer value:%p\n",ptr->value);    break;
        case(4):  printf("double  value:%f\n",ptr->value);    break;
        case(5):  printf("float   value:%f\n",ptr->value);    break;
        default:  printf("UNKNOWN value:%p\n",ptr->value);    break;
        }
}

bool List::push(Elem & item){
    Elem * entity = new Elem ;
    if( entity == NULL )
        return 0 ;
    entity->type = item.type ;
    entity->value = item.value ;
    count++;
    if(head == NULL ){
        entity->fore = NULL  ;
        head = tail = entity ;
    }
    else{
        entity->fore = tail ;
        tail->next = entity ;
        tail = entity ;
    }

entity->next = NULL;

return 1 ;
}

bool List::pop( Elem & item ){
    Elem * ptr ;
    if ( !count ) return 0;
    item.type = tail->type ;
    item.value= tail->value;
    if( head != tail ){
        ptr = tail->fore ;
        tail->fore->next = NULL ;
        delete tail ;
        tail = ptr ;
    }
    else{
        delete tail ;
        head = tail = NULL;
    }

    count--;

    return 1;
}

    bool List::insert( int pos , Elem & item ){
        Elem * ptr = NULL ;
        if( pos > count || pos < 0)
            return 0 ;
        if ( pos == count )
            push(item);
        else{
            ptr = head ;
            while(pos--) ptr = ptr->next ;

        Elem * entity = new Elem ;
        if( entity == NULL )
        return 0 ;
        entity->type = item.type ;
        entity->value = item.value ;

        if( ptr == head ){
            entity->next = head ;
            head->fore = entity ;
            entity->fore = NULL ;
            head = entity ;
        }
        else if ( ptr == tail ){
            entity->next = NULL ;
            entity->fore = tail ;
            tail->next = entity ;
            tail = entity ;
        }
        else{
            entity->next = ptr ;
            entity->fore = ptr->fore;
            ptr->fore->next = entity;       
            ptr->fore = entity ;
        }
        count++;
    }

    return 1 ;
    }

bool List::purge ( int pos , Elem & item ){
Elem * ptr = NULL ;
if( pos >= count || pos < 0)
    return 0 ;
else{
    ptr = head ;
    while(pos--) ptr = ptr->next ;

    if( ptr == head ){
        ptr->next->fore = NULL ;
        ptr = ptr->next ;
        delete head ;
        head = ptr ;
    }
    else if( ptr == tail ){
        ptr->fore->next = NULL ;
        ptr = ptr->fore ;
        delete tail ;
        tail = ptr ;
    }
    else{
        ptr->fore->next = ptr->next ;
        ptr->next->fore = ptr->fore ;
        delete ptr;
    }
    count--;
}
return 1 ;
}

bool List::getpos( int pos , Elem & item ){
    int count ;
    Elem * ptr = NULL ;
    if( pos >= count || pos < 0)
        return 0 ;
    else{
        ptr = head ;
        while(pos--) ptr = ptr->next ;

        item.type = ptr->type ;
        item.value = ptr->value;
    }

    return 1 ;
}

bool List::isempty(){
    return count==0;
}

void List::reverse(){
    Elem * ptr = head ;
    Elem * swap ,* next ;
    while( ptr ){
        next = ptr->next ;
        swap = ptr->fore ;
        ptr->fore = ptr->next ;
        ptr->next = swap ;
        ptr = next ;
    }
    swap = head ;
    head = tail ;
    tail = swap ;
}

void List::show() const{
    Elem * ptr = head ;
    Elem * back ;
    std::cout<<"List items......\n";
    while(ptr){
        innershow(ptr);
        ptr = ptr->next ;
    }
    std::cout<<"***************************\n";
}

List::~List(){
    count = 0 ;
    Elem * ptr = head ;
    Elem * back ;
    while(ptr){
        back = ptr ;
        ptr = ptr->next ;
        delete back;
    }
}
具體的測試文件:
#include<iostream>
#include<stdio.h>
#include"list.h"
int main(){

    Elem elem = { 0 , 6526 };
    List list;
    list.push(elem);
    elem.type = 1 ;
    list.push(elem);
    list.show();
    elem.type = 2 ;
    list.push(elem);
    list.show();
    elem.type = 3 ;
    list.push(elem);
    list.show();
    elem.type = 4 ;
    list.push(elem);
    list.show();
    printf("*************\n");
    list.show();
    printf("*****swap******\n");
    list.reverse();
    list.show();

    return 0 ;
}

相信這兩個例子都非常好的解釋了類編程的思想

c++類編程的兩個簡單的例子