精品欧美一区二区三区在线观看 _久久久久国色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技術棧公眾號

黄色录像免费观看| 精品国偷自产一区二区三区| 中文字幕第315页| 国产精品久久久久久久| 91精品国产手机| 一卡二卡三卡视频| 黄色av网址在线免费观看| 六月丁香婷婷色狠狠久久| 欧美国产日韩一区二区| 成人在线一级片| 国产区一区二| 日韩欧美一区二区三区久久| 亚洲一区二区三区在线观看视频| 国产精品视频久久久久久| 一本久道久久综合狠狠爱| 国产一区二区0| 欧美xxxx14xxxxx性爽| 性欧美丰满熟妇xxxx性久久久| 欧美色999| 亚洲大尺度视频在线观看| 天堂√在线观看一区二区| 亚洲精品久久久蜜桃动漫| 日日夜夜免费精品| 久久久免费高清电视剧观看| www中文在线| 免费观看久久av| 精品国产一区二区三区忘忧草| 国产免费999| 国产99在线观看| 亚洲视频综合在线| 日韩欧美99| 天堂av资源网| 国产精品伊人色| 国产精品激情av在线播放 | 亚洲视频一起| 欧美精品欧美精品系列| 国产真人无码作爱视频免费| 麻豆蜜桃在线观看| 亚洲一区二区三区在线| 这里只有精品66| 成a人v在线播放| 久久久亚洲综合| 国产一区免费在线观看| 亚洲AV无码精品色毛片浪潮| 麻豆精品在线视频| 国产精品精品久久久| 黄色片网站在线免费观看| 亚洲久久视频| 91精品国产乱码久久久久久蜜臀 | 欧洲色大大久久| 黄色片一级视频| 亚洲小少妇裸体bbw| 亚洲18色成人| 精品人妻少妇一区二区| 日本三级韩国三级欧美三级| 亚洲精品日日夜夜| av动漫在线播放| 日本动漫理论片在线观看网站| 亚洲精品ww久久久久久p站| 久久观看最新视频| 天堂8中文在线| 亚洲午夜一区二区| 久色视频在线播放| www.成人爱| 在线看国产一区| 波多结衣在线观看| 日韩精品第二页| 欧美一级日韩免费不卡| 在线播放av网址| 噜噜噜天天躁狠狠躁夜夜精品| 亚洲福利视频在线| a毛片毛片av永久免费| 国产成人一区| www国产精品视频| 欧美色图一区二区| 亚洲人www| 国产91精品最新在线播放| 综合久久中文字幕| 国产美女娇喘av呻吟久久| 国产成人精品免费视频大全最热| 蜜臀av在线观看| 久久久精品黄色| 在线丝袜欧美日韩制服| 免费毛片在线看片免费丝瓜视频 | 国产深夜男女无套内射| 性欧美又大又长又硬| 欧美在线影院一区二区| 天堂在线中文在线| 噜噜噜天天躁狠狠躁夜夜精品 | 久久久久欧美精品| 国产精品天天狠天天看| 国产成人精品一区二三区四区五区 | 中文字幕制服丝袜成人av| 男女激烈动态图| 制服丝袜专区在线| 欧美高清精品3d| 国产精品久久久久久亚洲色| 狠狠操综合网| 欧美日韩成人免费| 亚洲成人第一网站| 国产iv一区二区三区| 日韩av一区二区三区在线| gogo在线高清视频| 91久久精品午夜一区二区| 天堂av.com| 免费精品国产的网站免费观看| 久久中文字幕在线| 久久影视中文字幕| 丁香六月综合激情| 亚洲视频欧美在线| 欲香欲色天天天综合和网| 欧美一区二区三区在线观看| 精品少妇一区二区三区免费观| 自由日本语亚洲人高潮| 国产精品国产福利国产秒拍| 人妻一区二区三区四区| 中文字幕中文在线不卡住| 国产成人无码一二三区视频| 中文在线综合| www.亚洲成人| 国产偷人爽久久久久久老妇app| www.99精品| 日本黄网站色大片免费观看| 在线一区视频观看| 亚洲国产日韩欧美在线动漫| 国产免费无码一区二区视频| 日韩电影在线观看一区| 久久久久国产精品视频| ririsao久久精品一区| 欧美一级专区免费大片| www.99re6| 人人爽香蕉精品| 欧美一卡2卡3卡4卡无卡免费观看水多多| 免费在线国产视频| 欧美成人三级电影在线| 欧美特级一级片| 久久国产夜色精品鲁鲁99| 日韩在线三区| 吉吉日韩欧美| 亚洲人成77777在线观看网| 免费在线观看黄网站| 不卡的看片网站| 成人一级生活片| 中文久久电影小说| 久久久久久国产精品三级玉女聊斋 | 国产精品尤物| 欧美大陆一区二区| 欲香欲色天天天综合和网| 亚洲免费一在线| 中文字幕在线欧美| 久久久久久免费| 国产一区亚洲二区三区| 国精一区二区| 国产精品久久久久久婷婷天堂| 精品久久久久久久人人人人传媒 | 欧美日韩加勒比精品一区| 国产婷婷在线观看| 精品69视频一区二区三区Q| 国产成人看片| 综合日韩av| 亚洲欧美视频在线| wwwwww在线观看| 国产精品美女久久久久久久久久久 | 蜜桃视频在线观看91| 国产青青在线视频| 91福利区在线观看| 日韩一级二级三级| 日韩欧美中文字幕视频| 国产成都精品91一区二区三| 亚洲精品蜜桃久久久久久| 国产成人一二片| 欧美性做爰毛片| 国产大学生校花援交在线播放 | 国产伦一区二区| 亚洲尤物视频在线| 亚洲综合自拍网| 秋霞成人午夜伦在线观看| 中文字幕在线观看一区二区三区| 日韩免费成人| 日本成人精品在线| 天天在线视频色| 精品日韩欧美在线| 五月婷婷激情视频| 综合欧美亚洲日本| 精品视频站长推荐| 蜜桃传媒麻豆第一区在线观看| 欧美日韩亚洲国产成人| 欧美亚洲国产日韩| 成人精品视频在线| 国产色播av在线| 色婷婷综合成人| 日本高清视频www| 欧美午夜精品久久久久久超碰| 波多野结衣亚洲色图| 久久综合色8888| 亚洲一区二区三区四区精品 | 中文字幕 91| 国语自产精品视频在线看8查询8| 日本不卡二区高清三区| 久久久久久爱| 国产精品福利在线观看| 久久五月精品中文字幕| 最近免费中文字幕视频2019| 手机在线精品视频| 制服丝袜国产精品| caoporn国产| 亚洲一级在线观看| 中文字幕观看av| 久久久久久久综合色一本| 深夜视频在线观看| 久久精品国产久精国产爱| 欧美老熟妇喷水| 综合天堂av久久久久久久| 四虎一区二区| 妖精视频一区二区三区免费观看| 99高清视频有精品视频| 成人在线高清| 日本亚洲精品在线观看| www中文字幕在线观看| 久久久精品久久| 超碰免费在线观看| 亚洲女人天堂视频| 亚洲欧美另类日韩| 日韩免费电影网站| 国产又大又黄又爽| 欧美天堂一区二区三区| 亚洲成人第一网站| 欧美性猛交xxx| 日韩精品视频播放| 亚洲午夜激情av| 九九视频免费在线观看| 自拍偷自拍亚洲精品播放| 亚洲色图欧美色| 国产日韩欧美不卡在线| 国产色视频一区二区三区qq号| 成人在线视频首页| 乱码一区二区三区| 国产一区二区女| 激情五月婷婷基地| 久久国产福利国产秒拍| 亚洲欧美在线精品| 免费观看日韩电影| 污片在线免费看| 奇米888四色在线精品| 亚洲 中文字幕 日韩 无码| 久久婷婷av| 亚洲乱码国产一区三区| 免费成人av在线播放| 人人干人人干人人| 久久精品99国产国产精| 国产永久免费网站| 国产一区二区伦理片| 成人一区二区三区仙踪林| 国产成人av一区二区| 国产一卡二卡三卡四卡| av爱爱亚洲一区| 国产美女喷水视频| 久久久不卡网国产精品二区| 免费一级黄色录像| 一区在线观看视频| 在线日韩国产网站| 亚洲美女视频在线观看| 久久久久久久久艹| 精品人伦一区二区三区蜜桃网站 | 久久riav二区三区| 久久99免费视频| 性欧美精品一区二区三区在线播放| 国产欧美日韩一区二区三区四区| 色一情一乱一伦一区二区三区| 欧美亚洲国产一区| 国产人妻互换一区二区| 激情文学一区| 丰满人妻中伦妇伦精品app| 日本一不卡视频| 久久人人爽人人片| 99久久免费视频.com| 日本猛少妇色xxxxx免费网站| 亚洲男人的天堂在线观看| 懂色av懂色av粉嫩av| 偷拍日韩校园综合在线| 国产精品国产精品国产| 91精品国产乱| 日韩专区一区二区| www.xxxx欧美| 女厕盗摄一区二区三区| 国产精品久久久久久久久男| 日韩精品成人在线观看| 久久青青草原一区二区| 国产精品久久久久久麻豆一区软件 | 国户精品久久久久久久久久久不卡| 国产女大学生av| 久久99久久久久久久久久久| 男女性杂交内射妇女bbwxz| 国产三级精品三级| 欧美人妻精品一区二区免费看| 色偷偷成人一区二区三区91| 国产青青草视频| 亚洲欧洲视频在线| 天使と恶魔の榨精在线播放| 国产不卡视频在线| 99国产精品免费网站| 台湾成人av| 国产情侣一区| 人妻激情偷乱视频一区二区三区| 91麻豆成人久久精品二区三区| 色欲一区二区三区精品a片| 欧美性少妇18aaaa视频| 精品国产av 无码一区二区三区| 亚洲欧美中文日韩v在线观看| 欧美亚洲天堂| 成人黄色av免费在线观看| 精品一区三区| 久久国产精品视频在线观看| 国产一区二区三区在线观看精品 | 日韩www.| 日本中文字幕片| 成人av先锋影音| 国产极品国产极品| 欧美日韩亚洲综合| 免费人成在线观看网站| 国内精品久久久久影院优| 精品国产一级| 在线看成人av电影| 日本成人在线视频网站| 国产全是老熟女太爽了| 亚洲成人av电影在线| 国产黄a三级三级三级| 日韩一区视频在线| 99久久综合国产精品二区| 免费毛片一区二区三区久久久| 亚洲视频狠狠| 亚洲最大视频网| 一区二区三区四区精品在线视频| 91亚洲欧美激情| 日韩在线免费av| 黄色精品视频网站| 亚洲国产精品视频一区| 日韩精品亚洲一区二区三区免费| 成年人在线观看av| 日韩欧美一区二区三区久久| 三级毛片在线免费看| 欧美一区二粉嫩精品国产一线天| 青草久久视频| 成人av一级片| 久久久久久久久久久久久久久99| 日产精品久久久| 亚洲欧美制服丝袜| 欧美123区| 亚洲国产欧美不卡在线观看| 蜜桃视频第一区免费观看| 亚洲毛片亚洲毛片亚洲毛片| 欧美日韩色一区| 黄网站在线播放| av观看久久| 亚洲国产精品第一区二区| 国产十八熟妇av成人一区| 欧美日韩国产在线播放| 欧美高清成人| 国产精品女主播| 久久久久久久久久久妇女 | 国产v片免费观看| 92精品国产成人观看免费| 日日噜噜噜噜人人爽亚洲精品| 国产一区二区三区三区在线观看 | 91精品国产综合久久香蕉的特点| www.欧美日本韩国| 成人欧美一区二区三区视频xxx| 夜久久久久久| 九一在线免费观看| 欧美一区二区三区四区在线观看| 国产美女一区视频| 欧美在线激情| 黄色小说综合网站| 日本a在线观看| 国产一区二区三区直播精品电影 | 神马久久精品综合| 欧美mv日韩mv亚洲| 69久成人做爰电影| 制服诱惑一区| 成人av电影在线播放| 五月婷婷丁香在线| 欧美日本高清视频| 深夜福利久久| 夜夜爽久久精品91| 日韩欧美亚洲综合| 在线观看的网站你懂的| 精品视频一区在线| 精品一区精品二区高清| 日韩毛片在线视频| 日韩亚洲综合在线| 日韩丝袜视频| 午夜免费一级片| 欧美三级免费观看| av免费在线免费| 日本不卡一区二区三区在线观看| 国产一区二三区好的| 中文字幕免费观看| 欧美国产日韩在线| 日产精品一区二区| 亚洲国产果冻传媒av在线观看|