精品欧美一区二区三区在线观看 _久久久久国色av免费观看性色_国产精品久久在线观看_亚洲第一综合网站_91精品又粗又猛又爽_小泽玛利亚一区二区免费_91亚洲精品国偷拍自产在线观看 _久久精品视频在线播放_美女精品久久久_欧美日韩国产成人在线

如何把C++的源代碼改寫成C代碼?

開發(fā) 后端
C++解釋器比C語言解釋器占用的存儲空間要大,想要在某些特定場合兼容C++代碼,同時為了節(jié)省有限的存儲空間,降低成本,也為了提高效率,將用C++語言寫的源程序用C語言改寫是很有必要的。

C++解釋器比C語言解釋器占用的存儲空間要大,想要在某些特定場合兼容C++代碼,同時為了節(jié)省有限的存儲空間,降低成本,也為了提高效率,將用C++語言寫的源程序用C語言改寫是很有必要的。

C++與C區(qū)別最大的就是C++中的類的概念和特性,將C++改為C的問題,就轉換成如何將類化去的問題。

方法有兩種:

  • 將C++中的面向對象特征去掉,先全部理解源代碼的邏輯,然后改寫;
  • 是在C中保留面向對象的部分特征,用結構體實現(xiàn)類的功能。

第一種方法,對于類的數(shù)目很少的情況還可以,如果類的數(shù)目比較多,全部理解源代碼,然后重寫就很耗時間,而且很容易出錯,更甚者,如果遇到大的項目想全部理解源代碼幾乎是不可能的。

下面對C++的一些特性,以及如何在c里實現(xiàn)或者替代,作一些初步的探討。

說明:

  • 函數(shù)Ixx為類xx的構造函數(shù)的實現(xiàn)。
  • 原類的成員函數(shù)改為前綴為結構體名+‘_’的函數(shù)。
  • 函數(shù)指針U為原類的析構函數(shù)的聲明;
  • U+結構體名稱為原類的析構函數(shù)的實現(xiàn);
  • Fun-_+結構體名為對該結構體成員函數(shù)指針進行指向;

以后遇到上述情況將不再說明。

 

[[332641]]

一、類的成員函數(shù)和數(shù)據(jù)成員

由于struct沒有對成員的訪問權限進行控制,必須加入額外的機制進行訪問控制,這樣一來就使得程序復雜化了,所以只能放棄訪問權限的控制。

  • 對于類的數(shù)據(jù)成員可以直接轉為C中結構體的數(shù)據(jù)成員。
  • 函數(shù)則需轉化為對應的函數(shù)指針,因為struct里不允許出現(xiàn)函數(shù)的聲明和定義。而函數(shù)前如果有virture,inline等修飾符也要去掉,如函數(shù)void funca(int a);改為void (*funca)(struct B *p,int a);大家可以看到函數(shù)指針的原型里加了一個指針struct B的指針,這是因為要在函數(shù)內部對類的成員進行操作,要靠該指針指定結構體的成員。在類的成員函數(shù)里,實際上在參數(shù)列里也隱含有一個指向自身的this指針。
  • 對于靜態(tài)成員則要定義成全局變量或全局函數(shù),因為結構體中不能有靜態(tài)成員。

二、類的構造函數(shù)

類在實例化的時候會調用類的缺省構造函數(shù),在struct里,要定義一個同名函數(shù)指針指向一個具有構造函數(shù)功能的初始化函數(shù),與構造函數(shù)不同的是,要在初始化函數(shù)里加入進行函數(shù)指針初始化的語句.使用的時候在創(chuàng)建結構體變量的時候要用malloc而不是new,并且這個時候要手工調用初始化函數(shù)。

如下例所示:

  1. class A 
  2. public
  3.     A(); 
  4.     ~A(); 
  5.     void func(int a); 
  6. private: 
  7.     int b; 
  8. }; 
  9. A::A() 
  10.     b=0; 
  11.  
  12. void A::func(int a) 
  13.     b=a; 
  14.  
  15. typedef struct classA A; 
  16. struct classA 
  17.      void (*A)(struct classA *p);//構造函數(shù)指針 
  18.      void (*U)(struct classA *p);//析構函數(shù)指針 
  19.      void (*func)(struct classA *p,int a); 
  20.      int b; 
  21. }; 
  22.  
  23. void fun_A(A *p){ 
  24.      p->func=classA_func; //將函數(shù)指針初始化 
  25.  
  26. void IA(A *p) //構造函數(shù),命名規(guī)則在類名前加I{ 
  27.      fun_A(p); 
  28.      p->b=0;    //原構造函數(shù)所作部分 
  29.  
  30. void classA_func(A *p,int a){ 
  31.     p->b=a; 

在使用的地方采用如下方式:

  1. A *s=(A*)malloc(sizeof(A)); 
  2.    s->A=IA; 
  3.    s->A(s); 

 

如何把C++的源代碼改寫成C代碼?

三、類的析構函數(shù)

類的析構函數(shù)所作的工作是釋放所占的資源。

在C中,無論是哪個struct都用函數(shù)指針U替代析構函數(shù)。之所以所有的struct都用指針U是基于如下情況:

如果將子類指針賦給基類指針,基類指針在釋放的時候不必考慮調用哪個函數(shù)名的析構函數(shù),只需調用成員函數(shù)U即可。成員函數(shù)U需要像一般成員函數(shù)一樣在fun_類名()函數(shù)中指定。

類的析構函數(shù)是由系統(tǒng)調用的,在C中則要顯式調用。至于何時調用,要準確判斷。

四、類的拷貝構造函數(shù)

類的拷貝構造函數(shù)主要用途是加快以下情況下類的構建速度:

  • 作為參數(shù)傳給函數(shù)。(additem(Itema))
  • 作為函數(shù)返回值。
  •  實例化類時作參數(shù)。

這三種情況下都是由系統(tǒng)直接調用類的拷貝構造函數(shù)而不是構造函數(shù)。

注意:C=D;不會調用拷貝構造函數(shù),這種情況下使用的是重載‘=’運算符的方法。(詳見運算符重載);

由于C中定義struct變量的時候,使用的全部是指針,不會用到拷貝構造函數(shù),所以暫不考慮。對于原來函數(shù)參數(shù)或者返回值需要類變量的,要全部轉化為類指針的方式。實例化類時作參數(shù)的情況,可以通過另外定義一個帶參數(shù)的構造函數(shù)來解決。

五、類的內聯(lián)函數(shù)和虛函數(shù)

內聯(lián)函數(shù)和虛函數(shù)的修飾符inline 、virture 要全部去掉。內聯(lián)函數(shù)體則要去掉,將內聯(lián)函數(shù)在外面定義成一個函數(shù)。如:

  1. class B 
  2.     … 
  3.     virture void funb(); 
  4.     inline int add()const {return a+b;}; 
  5. private: 
  6.     int a; 
  7.     int b; 
  8.     … 

改為:

  1. typedef classB B; 
  2. struct classB 
  3.     … 
  4.     void (*funb)(struct classB *p); 
  5.     int (*add)(struct classB *p); 
  6.     int a; 
  7.     int b; 
  8.  
  9. void classB_funb(B *p){ 
  10.      … 
  11.  
  12. int classB_add(B *p){ 
  13.      return p->a+p->b; 
  14.  
  15. void fun_classB(B *p){ 
  16.      … 
  17.      p->funb=classB_funb; 
  18.      p->add= classB_add; 

 

如何把C++的源代碼改寫成C代碼?

六、重載

類中重載有函數(shù)重載和運算符重載兩種:

1)函數(shù)的重載

函數(shù)重載滿足的條件是:函數(shù)名相同,參數(shù)個數(shù)或者參數(shù)類型不同。

這樣在調用的時候,會根據(jù)你輸入的參數(shù)不同,調用不同的函數(shù)。

在C中只好分別起不同的名字,沒有別的解決辦法。

2)運算符重載

運算符重載只是為了滿足一般的運算符使用的習慣而又不會出現(xiàn)錯誤。

C中不支持運算符重載,可以定義一個函數(shù)實現(xiàn)該功能。

這是一般類的修改。

 

如何把C++的源代碼改寫成C代碼?

七、類的繼承

1)單繼承

如果類之間有繼承關系,先將基類按照一般類的改法,修改好。然后將基類的定義部分全部拷到子類的前頭。除了將基類的構造函數(shù)名改為子類構造函數(shù)名外,不可以將基類定義的部分作其他改動。并在構造函數(shù)里調用基類的構造函數(shù),然后如果子類覆蓋了基類的函數(shù),則要把該函數(shù)指針重定向到子類函數(shù)。這是為了保持類的繼承帶來的動態(tài)聯(lián)編的特性。

類之間的繼承關系是復雜且多變的,為了保證基類在所有子類中的唯一而且方便修改,最好的方法就是把基類的結構體部分做成宏,在子類中直接使用即可。

2)多繼承

我個人認為多繼承是最好不要用,他會帶來一些問題,會出現(xiàn)多個繼承路徑的問題。除非是為了方便編程而使用的,如繼承接口等等。

多繼承也是可以改的,將多個基類的成員全部拷到子類里,遇到重復的成員名,則在前面加上前綴來區(qū)別,當然這個指的是基類之間有相同的,如果是派生類和基類之間有重名的,則會覆蓋基類。

八、其他

以上就是C++中主要的與C的區(qū)別最大而且最常用的特性及修改方法。其他的還有一些比如模板的使用等等,這些都是為了方便編程,復用代碼。C中沒有,只好自己寫多個函數(shù)來分別實現(xiàn)。另外還有參數(shù)列表里的&符號要用指針替代,缺省值也要去掉,而在調用的時候要注意將缺省值寫上。

責任編輯:未麗燕 來源: 今日頭條
相關推薦

2010-01-14 10:42:08

C++源代碼

2010-01-26 13:14:48

2014-04-04 09:53:18

2048C++

2021-01-04 07:57:07

C++工具代碼

2010-01-22 18:06:24

C++代碼

2010-01-22 13:20:27

C++代碼

2010-01-11 16:59:50

C++源代碼

2024-04-23 08:01:20

面向對象C 語言代碼

2023-10-30 10:29:50

C++最小二乘法

2010-01-21 10:23:53

C++代碼

2010-01-14 14:40:21

C++代碼

2010-01-18 16:17:53

C++代碼

2023-11-06 07:51:24

C++線程編程

2011-05-18 18:05:47

C#C++

2011-05-18 17:56:38

C#C++

2013-09-05 09:50:11

C++代碼優(yōu)化

2010-01-22 13:45:36

C++代碼

2010-01-18 13:42:51

C++代碼

2010-02-05 10:23:09

C++基本函數(shù)

2010-02-02 15:59:32

C++賦值函數(shù)
點贊
收藏

51CTO技術棧公眾號

午夜视黄欧洲亚洲| 国产在线视频一区二区三区| 亚洲乱码av中文一区二区| 中文字幕乱码人妻综合二区三区| 麻豆app在线观看| 日韩av网站在线观看| 久久精品国产清自在天天线| japanese在线观看| jizz亚洲女人高潮大叫| 成人免费一区二区三区在线观看| 99视频日韩| 亚洲永久精品一区| 在线电影福利片| av一本久道久久综合久久鬼色| 日本精品性网站在线观看| 91香蕉国产视频| 97久久超碰| 欧美三片在线视频观看| 国产欧美日韩小视频| 国产精品视频二区三区| 国产91精品在线观看| 国产精品久久久久高潮| 日本一级淫片色费放| 色综合蜜月久久综合网| 亚洲精品福利视频| 性生活一级大片| av免费在线一区| 欧美日韩国产页| 蜜桃视频一区二区在线观看| av黄色在线观看| 91日韩在线专区| 成人在线视频电影| 国产一区二区在线视频聊天 | 国产伦精一区二区三区| 日本久久久久久久久| 久久精品欧美一区二区| 99久久www免费| 色综合天天综合网国产成人综合天| 国产一区欧美二区三区| 免费污网站在线观看| 最近在线中文字幕| 亚洲综合一区二区精品导航| 伊人久久99| av片在线看| 国产欧美一区二区三区在线老狼| 精品日本一区二区| 国模人体一区二区| 国产精品1区二区.| 91亚洲精品久久久| 国产精品久久777777换脸| 日本va欧美va瓶| 国产精品黄色影片导航在线观看| 国产一级片毛片| 国产精品久久国产愉拍| 久久久久国产精品免费网站| 欧美日韩免费做爰视频| 欧美一区高清| 精品国产一区二区三区忘忧草| 免费黄频在线观看| 国产精品色婷婷在线观看| 欧美疯狂性受xxxxx喷水图片| 伊人影院综合在线| 曰本一区二区| 欧美一级艳片视频免费观看| 少妇愉情理伦片bd| jizz性欧美2| 亚洲黄色av网站| www.色天使| 精品一级毛片| 久久久国产精品免费| 欧洲猛交xxxx乱大交3| 伊人久久久大香线蕉综合直播| 亚洲欧美色图片| 免费看91的网站| 99精品电影| 久久久极品av| 久久精品视频8| 毛片一区二区| 国产精品精品久久久久久| 在线观看中文字幕2021| aa国产精品| 精品国产拍在线观看| 日本高清一二三区| 国产精品av久久久久久麻豆网| 性欧美长视频免费观看不卡| 在线观看污污网站| 久久av资源站| 国产精品制服诱惑| 国产又爽又黄免费软件| 国产99久久久国产精品潘金| 鲁片一区二区三区| 日本在线免费网| 久久久久久免费毛片精品| 福利视频一区二区三区| 深夜福利免费在线观看| 国产精品久久久久影视| 2019日韩中文字幕mv| 激情开心成人网| 日韩免费在线观看| 泷泽萝拉在线播放| 亚洲精品在线观看91| 欧美又大粗又爽又黄大片视频| 久久综合成人网| 久久婷婷影院| dy888夜精品国产专区| 可以直接在线观看的av| 亚洲乱码国产乱码精品精的特点| 欧美精品一区免费| 国产在线一区不卡| 一本一道久久a久久精品逆3p | 亚洲成va人在线观看| 别急慢慢来1978如如2| 日韩视频一二区| 在线电影中文日韩| 三级黄色在线视频| 国产乱人伦偷精品视频不卡| 欧美日韩一区二区视频在线| 日本一本在线免费福利| 色av成人天堂桃色av| 国产极品粉嫩福利姬萌白酱 | 欧美亚洲自拍偷拍| 色哟哟视频在线| 亚洲精品成人无限看| 国产成人综合精品在线| 亚洲aⅴ乱码精品成人区| 亚洲欧美偷拍另类a∨色屁股| 日韩一级免费在线观看| 在线女人免费视频| 欧美mv日韩mv国产网站app| www.日本高清视频| 国产亚洲欧洲| 国产精品一区二区免费看| 在线中文字幕第一页| 欧美高清性hdvideosex| 国产馆在线观看| 天堂久久久久va久久久久| 狠狠综合久久av| av电影在线免费| 精品久久五月天| 久久久久久久国产精品毛片| 国产精品一级二级三级| 亚洲欧美一二三| 国产色99精品9i| 久久久精品电影| 99热这里只有精品99| 亚洲女同女同女同女同女同69| 岛国毛片在线播放| 日韩高清欧美| 成人在线免费观看视视频| 免费黄色在线看| 这里只有精品免费| 中文字幕av播放| 国产成人精品一区二区三区网站观看| 在线观看18视频网站| 久久精品一级| 久久久久久久久久婷婷| 丰满大乳国产精品| 激情成人中文字幕| 青青草福利视频| 日韩精品国产欧美| 亚洲一区二区三区乱码| 国产一区二区视频在线看| 久久6精品影院| 人妻一区二区三区四区| 欧美国产一区视频在线观看| 好男人www社区| 天天揉久久久久亚洲精品| 亚洲精品欧美日韩专区| 国产黄色大片在线观看| 日韩精品视频观看| 伊人久久中文字幕| 自拍偷在线精品自拍偷无码专区| 巨乳女教师的诱惑| 99热这里只有精品8| 日本午夜一区二区三区| 羞羞网站在线看| 欧美精品一区二| 欧美一区二区三区网站| 成人自拍视频在线观看| 免费在线a视频| 91影院成人| 国产欧美日韩一区| 成人免费视屏| 精品国产乱码久久久久久久| 日本免费在线观看视频| 综合婷婷亚洲小说| 99久久人妻精品免费二区| 欧美a级理论片| 成人黄色大片网站| 欧美影院三区| 国产高清自拍一区| 成人不卡视频| 97视频在线看| 久久精品视频免费看| 亚洲韩国欧洲国产日产av| 精品乱码一区内射人妻无码 | 国产精一区二区| 欧美一区视频在线| 在线网址91| 尤物99国产成人精品视频| 性一交一乱一乱一视频| 在线免费视频一区二区| 国产精品111| 国产精品久久久爽爽爽麻豆色哟哟| zjzjzjzjzj亚洲女人| 美女看a上一区| 国产精品自拍片| 伊人情人综合网| 亚洲国产另类久久久精品极度| 国产美女撒尿一区二区| 成人激情视频在线播放| 韩日成人影院| 欧美激情一区二区三区高清视频| 在线免费观看黄色网址| 亚洲精品一区二区三区不| 国产精品黄色大片| 久久婷婷国产综合尤物精品| www.国产com| 亚洲欧美日韩国产手机在线| 黄瓜视频污在线观看| 国产精品综合网| 日韩不卡一二三| 麻豆精品网站| 99精品在线免费视频| 欧美精品三区| 日本女人高潮视频| 日韩欧美精品| 欧美视频1区| 米奇精品关键词| 成人av网站观看| 久久精品一级| 91九色对白| 国产精品欧美一区二区三区不卡| 国产女同一区二区| 99久久er| 国产精品亚洲网站| 亚洲爱爱视频| 国产精品九九久久久久久久| 超碰aⅴ人人做人人爽欧美| 97精品视频在线| 嗯~啊~轻一点视频日本在线观看| 久热国产精品视频| а√天堂在线官网| 久久精品视频网站| 免费黄网站在线| 久久综合伊人77777蜜臀| 尤物在线视频| www.日韩.com| 黄色免费在线观看| 欧美精品少妇videofree| 国产区在线观看| 美日韩精品免费视频| 在线中文字幕视频观看| 欧美国产日韩xxxxx| 免费毛片在线看片免费丝瓜视频 | 精品午夜一区二区三区| 欧美大奶一区二区| 蜜桃传媒视频麻豆一区| 国产一区二区精品福利地址| 日韩高清三级| 99久久久久久中文字幕一区| 青青草综合视频| 韩国在线视频一区| 无罩大乳的熟妇正在播放| 久久久精品日韩| 手机视频在线观看| 国产一区91精品张津瑜| 亚洲成人福利视频| 99国产精品久久久久| 永久免费成人代码| 亚洲欧洲av一区二区三区久久| 青娱乐国产在线视频| 久久99久久久久久久久久久| 三上悠亚在线一区| 国产一区二区三区在线观看精品 | 国内精品久久久久久久久久久| 日韩免费在线观看| 三级网站在线看| 在线观看国产欧美| 91网在线看| 97超碰国产精品女人人人爽 | 久久国产精品一区二区三区| 精品国产一区二区三区香蕉沈先生| 在线观看日韩片| 在线观看的日韩av| 欧美三级理论片| 国产精品一区二区黑丝| 插吧插吧综合网| 一区二区三区小说| 日韩手机在线视频| 欧美一卡2卡3卡4卡| 青梅竹马是消防员在线| 久久中文字幕在线| 午夜精品成人av| 成人av免费看| 久久网站免费观看| 激情五月宗合网| 久久99精品国产麻豆婷婷洗澡| 妖精视频一区二区| 国产精品免费久久久久| 91香蕉在线视频| 91麻豆精品国产自产在线| 日本亚洲欧美| 欧美国产精品人人做人人爱| 狠狠久久综合| 欧美夜福利tv在线| 精品国产亚洲一区二区三区| 日韩啊v在线| 亚洲国产一区二区三区高清 | 国产成人福利在线| 亚洲一级不卡视频| 伊人免费在线观看| 日韩电影免费观看在线观看| av免费网站在线观看| 国产精品久久激情| 婷婷精品在线观看| 国产女教师bbwbbwbbw| 老司机一区二区| 最新中文字幕av| 欧美性猛交xxxx富婆| 国产自产一区二区| 久久夜色撩人精品| 久久亚洲国产精品尤物| 欧美一级二级三级| 国产视频一区免费看| 国产高潮失禁喷水爽到抽搐| 日韩一区在线免费观看| 国产精品51麻豆cm传媒 | 国产精品福利视频| 91精品国产乱码久久久久久| 网站一区二区三区| 国产欧美一区二区精品性色超碰| 国产黄色免费观看| 日韩成人小视频| 天堂电影一区| 麻豆传媒一区| 亚洲影音一区| 精品久久久久久久无码| 99国内精品久久| 奇米影视第四色777| 精品动漫一区二区三区在线观看| 18视频在线观看网站| 91久久夜色精品国产网站| 国产大片一区| 中文字幕12页| 亚洲精品视频一区二区| www.色日本| 久久久久久久久亚洲| 成人三级av在线| 精品无码国模私拍视频| 99国产精品久| 久久99精品波多结衣一区| 精品亚洲精品福利线在观看| 亚洲欧洲日本韩国| 欧美日韩一区二区视频在线| 肉色丝袜一区二区| 秋霞网一区二区三区| 欧美日韩二区三区| a黄色片在线观看| 国产精品日韩欧美一区二区| 日韩亚洲国产欧美| 国产激情在线免费观看| 欧洲精品一区二区| 麻豆传媒在线免费看| 99热最新在线| 校园激情久久| 91香蕉国产视频| 精品精品欲导航| 在线天堂中文资源最新版| 日韩片电影在线免费观看| 国内精品伊人久久久久影院对白| 欧美成人综合色| 亚洲黄色www网站| h1515四虎成人| www.男人天堂网| 久久婷婷成人综合色| 在线免费一级片| 欧美交受高潮1| 啪啪亚洲精品| 中文字幕一区二区三区四| 亚洲h动漫在线| 最新真实国产在线视频| 97人人做人人人难人人做| 国产精品综合| 性欧美疯狂猛交69hd| 亚洲韩国青草视频| 久久99国产精品二区高清软件| 国产青草视频在线观看| 久久久无码精品亚洲日韩按摩| 国产精品自产拍| 欧美中文在线观看国产| 911久久香蕉国产线看观看| 亚洲天堂av网站| 欧美日韩精品专区| 黄色激情在线播放| 国产高清免费在线| 91一区二区在线| av中文在线观看| 国产精品成人观看视频国产奇米| 国产一在线精品一区在线观看|