<output id="qn6qe"></output>

    1. <output id="qn6qe"><tt id="qn6qe"></tt></output>
    2. <strike id="qn6qe"></strike>

      亚洲 日本 欧洲 欧美 视频,日韩中文字幕有码av,一本一道av中文字幕无码,国产线播放免费人成视频播放,人妻少妇偷人无码视频,日夜啪啪一区二区三区,国产尤物精品自在拍视频首页,久热这里只有精品12

      C語言中的類模擬(C++編程思想)

         在面向對象的語言里面,出現了類的概念。這是編程思想的一種進化。所謂類:是對特定數據的特定操作的集合體。所以說類包含了兩個范疇:數據和操作。而C語言中的struct僅僅是數據的集合。
        1.實例:下面先從一個小例子看起
        #ifndef C_Class
         #define C_Class struct
        #endif
        C_Class A {
         C_Class A *A_this;
         void (*Foo)(C_Class A *A_this);
         int a;
         int b;
        };
        C_Class B{ //B繼承了A
         C_Class B *B_this; //順序很重要
         void (*Foo)(C_Class B *Bthis); //虛函數
         int a;
         int b;
         int c;
        };
        
        void B_F2(C_Class B *Bthis)
        {
         printf("It is B_Fun/n");
        }
        void A_Foo(C_Class A *Athis)
        {
         printf("It is A.a=%d/n",Athis->a);//或者這里
        // exit(1);
        // printf("純虛 不允許執行/n");//或者這里
        }
        void B_Foo(C_Class B *Bthis)
        {
         printf("It is B.c=%d/n",Bthis->c);
        }
        void A_Creat(struct A* p)
        {
         p->Foo=A_Foo;
         p->a=1;
         p->b=2;
         p->A_this=p;
        }
        
        void B_Creat(struct B* p)
        {
         p->Foo=B_Foo;
         p->a=11;
         p->b=12;
         p->c=13;
         p->B_this=p;
        }
        
        int main(int argc, char* argv[])
        {
         C_Class A *ma,a;
         C_Class B *mb,b;
         A_Creat(&a);//實例化
         B_Creat(&b);
         mb=&b;
         ma=&a;
         ma=(C_Class A*)mb;//引入多態指針
         printf("%d/n",ma->a);//可惜的就是 函數變量沒有private
         ma->Foo(ma);//多態
         a.Foo(&a);//不是多態了
         B_F2(&b);//成員函數,因為效率問題不使用函數指針
         return 0;
        }
        輸出結果:
        11
        It is B.c=13
        It is A.a=1
        It is B_Fun
        2.類模擬解說:
         我在網上看見過一篇文章講述了類似的思想(據說C++編程思想上有更加詳細的解說,可惜我沒空看這個了,如果有知道的人說一說吧)。但是就象C++之父說的:“C++和C是兩種語言”。所以不要被他們在語法上的類似就混淆使用,那樣有可能會導致一些不可預料的事情發生。
         其實我很同意這樣的觀點,本文的目的也不是想用C模擬C++,用一個語言去模擬另外一個語言是完全沒有意義的。我的目的是想解決C語言中,整體框架結構過于分散、以及數據和函數脫節的問題。
         C語言的一大問題是結構松散,雖然現在好的大型程序都基本上按照一個功能一個文件的設計方式,但是無法做到更小的顆粒化――原因就在于它的數據和函數的脫節。類和普通的函數集合的最大區別就在于這里。類可以實例化,這樣相同的函數就可以對應不同的實例化類的變量。
         自然語言的一個特點是概括:比如說表。可以說手表,鐘表,秒表等等,這樣的描述用面向對象的語言可以說是抽象(繼承和多態)。但是我們更要注意到,即使對應于手表這個種類,還是有表鏈的長度,表盤的顏色等等細節屬性,這樣細微的屬性如果還用抽象,就無法避免類膨脹的問題。所以說類用成員變量來描述這樣的屬性。這樣實例并初始化不同的類,就描述了不同屬性的對象。
         但是在C語言中,這樣做是不可能的(至少語言本身不提供這樣的功能)。C語言中,如果各個函數要共享一個變量,必須使用全局變量(一個文件內)。但是全局變量不能再次實例化了。所以通常的辦法是定義一個數組。以往C語言在處理這樣的問題的時候通常的辦法就是這樣,比如說socket的號,handel等等其實都是數組的下標。(不同的連接對應不同的號,不同的窗口對應不同的handel,其實這和不同的類有不同的成員變量是一個意思)
         個人認為:兩種形式(數組和模擬類)并無本質的區別(如果不考慮虛函數的應用的話),它們的唯一區別是:數組的辦法將空間申請放在了“模塊”內,而類模擬的辦法將空間申請留給了外部,可以說就這一點上,類模擬更加靈活。
        3.其他的話:
         我的上述思想還是很不成熟的,我的目的是想讓C語言編程者能夠享受面向對象編程的更多樂趣。我們僅僅面對的是浩瀚的“黑箱”,我們的工作是堆砌代碼,而且如果要更改代碼功能的時候,僅僅換一個黑箱就可以了。
         而更大的目的是促使這樣的黑箱的產生。或許有一天,一種效率很好,結構很好的語言將會出現。那個時候編程是不是就會象說話一樣容易了呢

      posted @ 2009-04-15 17:29  .NET快速開發框架  閱讀(532)  評論(0)    收藏  舉報
      主站蜘蛛池模板: 亚洲一区二区av免费| 一区二区三区久久精品国产| 中文精品无码中文字幕无码专区| 久久99精品久久久久久| 国产精品亚洲А∨怡红院| 免费国产一级 片内射老| 久久久久久久久久久免费精品| 人人干人人噪人人摸| 亚洲精品tv久久久久久久久久 | 午夜成人性爽爽免费视频| 久久精品免视看国产成人| 久久综合激情网| 精品人妻二区中文字幕| 久草热大美女黄色片免费看| 一区二区三区精品不卡| 欧美性猛交xxxx乱大交丰满| 成人3D动漫一区二区三区| 四虎永久精品免费视频| 国产精品久久久久久久久久| 亚洲成av人片在www鸭子| 国产精品人妻系列21p| 黑人玩弄人妻中文在线| 国产微拍一区二区三区四区 | 无码人妻一区二区三区AV| 久久天天躁狠狠躁夜夜婷| 国产精品一区二区三区91| 久久久久久久久18禁秘| 精品久久一线二线三线区| 国产一区日韩二区欧美三区 | 亚洲综合一区二区三区| 亚洲av永久无码精品网站| 国产爆乳无码av在线播放| 亚洲宅男精品一区在线观看| 久久人人爽人人爽人人av| 久章草在线毛片视频播放| 亚洲天堂男人的天堂在线| 国产另类ts人妖一区二区| 龙川县| 国产乱码精品一区二区三| 久久久精品国产精品久久| 久久国产精品波多野结衣av|