用C寫有物件導向特點的程式

來源:互聯網
上載者:User

比如在一個項目中,有大量的資料結構,他們都是雙向鏈表,但又想共用一套對鏈表的操作演算法,這怎麼做到呢,C中又沒有C++中的繼承,不然我可以繼承一父(類中只有兩個指標,一個向前一個向後),而其演算法可以寫在你類中的虛函數中,供子類使用。如:

class Links
{
public:
    Links* back;
    Links* forword;

    virtual Add(){ ... };
    virtual Del(){ ... };
    virtual Ins(){ ... };
    virtual Print() =0;
    ....

};

於是對於特定的資料結構我們可以:
class mylinks : public Links
{
public:
    char* myname;
    char sex;
    int  age;
    ...
    virtual Print(){ .... }

};
對其操作時都可以使用你類的泛型演算法。

在C中,該如何做呢?我們用C中的指標和強制類型轉可以做到。

下面是我總結出來的一個小的程式,體現了用指標的彈性來實現這一繼承的效果:
(我在Liniux下的GCC調試通過)

=======================================

#include <stdio.h>

/* 雙向鏈表 (類似於父類)*/
typedef struct hLinks{
   struct hLinks *bwLink;
   struct hLinks *fwLink;
} hLinks;

/*
 * 一個使用雙向鏈表的結構
 *     (類似於子類)
 */
typedef struct hEnt{
   hLinks links;
   int hData;
   char key[10];
} hEnt;

/*
 *  雙向鏈插入泛型演算法 (類似於父數中的成員函數)
 */
Insert( hLinks* elem, hLinks *dest )
{
   if ( !elem || !dest ) return;

   elem->bwLink = dest->bwLink;
   elem->fwLink = dest;
   dest->bwLink->fwLink = elem;
   dest->bwLink = elem;
}

/*
 *  列印 (類似於子類重載父類的成員函數)
 */
PrintLink( hLinks *h )
{
    hEnt *p ;

    for( p = ( hEnt* ) h->fwLink;     /*  <-----------把hLink再轉回來  */
         p != ( hEnt* ) h;
         p = ( hEnt* )( (hLinks*)p )->fwLink )
    {
       printf("hData=[%d], key=[%s]/n", p->hData, p->key);
    }
}

 

main()
{
   hLinks head;
   hEnt a[4];
   int i;

   head.bwLink = &head;
   head.fwLink = &head;

   for(i=0;i<4;i++)
   {
      a[i].hData = i*10;
      sprintf(a[i].key,"id=%d", i);

      /*  使用泛型演算法構造雙向鏈  */ 
      Insert( (hLinks *) &a[i], (hLinks *) &head ); /*   <-----注意這個強制轉換  */
   }

   PrintLink( (hLinks *) &head ); /*   <-------也注意這個強制轉換  */
}

其實,C++就是把C++翻譯成C,再編譯,所以編譯好慢。我這裡的這個動作可能類似C++轉成C後的樣子吧。大家多交流(litmouse@km169.net)

————
(著作權,如需轉載,請註明出處及作者)

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.