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

從C#到C++容易出現的問題解答

開發 后端
本文從頭文件、namespace、繼承三個方面解答了從c#到c++的一些容易出現的困惑,希望會對大家有用。

前言

最近在學習用c++寫一下3D引擎(廢話一下,叫做WuguiEngine,首先Wugui是我的外號,也是代表這個引擎很粗糙,速度很慢,呵呵.之后等引擎成熟一點我再寫寫相關的一些文章).這幾天寫起來感覺c++好多地方和c#區別很大,這里大概寫寫這兩天碰到的一些問題,也許是從c#到c++的時候的一些通病,對c++ 新手也有一定的幫助.

另外在本文中,多數是將類拆分為.h文件和.cpp文件這樣對于工程來說更好管理.

另外閱讀本文需要一定的c++基礎,本文主要是一些雜碎的心得,而不是完整的教學,下面就開始解答從c#到c++的問題。

頭文件

頭文件是c#沒有的內容,所以用好頭文件是學習c++首先需要解決的一個內容.頭文件在正常的時候應該是只放上定義,實現代碼應該寫在同名的cpp文件里面

1) 重復包含:頭文件A.H被B.H與C.H同時包含,則在編譯的時候,A.H里面定義的代碼將被定義兩次,造成"Symbol already defined",在這種時候應該在.H文件頭尾處加上下列的代碼就可以解決這個問題:

  1. #ifndef _NAME_H  
  2.  #define _NAME_H  
  3.  //add defination  
  4. #endif 

其實#ifndef與#define的內容只要對于每個.h文件是唯一的就好了.

 2)嵌套包含:在A.H(class A)中使用了class B,又在B.H(class B)中使用了class A,這個時候需要在類的前面加入前置定義,下面的代碼:  

  1. #ifndef _A_H  
  2.    #define _A_H  
  3.       
  4.    #include "B.H"  
  5.       
  6.    //前置聲明  
  7.    class B;   
  8.       
  9.    class A  
  10.    {  
  11.       //add defination  
  12.    }  
  13.       
  14.    #endif 

這點說明,頭文件并不能代替前置聲明,對于有namespace的情況,前置聲明更加復雜,下一小節將談談這點內容.

3)一些經驗:

頭文件包含其實是一想很煩瑣的工作,不但我們看著累,編譯器編譯的時候也很累,再加上頭文件中常常出現的宏定義。感覺各種宏定義的展開是非常耗時間的,遠不如自定義函數來得速度。我僅就不同頭文件、源文件間的句則結構問題提出兩點原則,僅供參考:

第一個原則應該是,如果可以不包含頭文件,那就不要包含了。這時候前置聲明可以解決問題。如果使用的僅僅是一個類的指針,沒有使用這個類的具體對象(非指針),也沒有訪問到類的具體成員,那么前置聲明就可以了。因為指針這一數據類型的大小是特定的,編譯器可以獲知。

第二個原則應該是,盡量在CPP文件中包含頭文件,而非在頭文件中。假設類A的一個成員是是一個指向類B的指針,在類A的頭文件中使用了類B的前置聲明并便宜成功,那么在A的實現中我們需要訪問B的具體成員,因此需要包含頭文件,那么我們應該在類A的實現部分(CPP文件)包含類B的頭文件而非聲明部分(H文件)。

第三個原則是(我自己覺得的):盡量對引用的其他的類都加上前置聲明.這樣不僅使得程序的結構更加清楚,而且使得可以少出一些編譯錯誤

namespace

  1.  #ifndef _BASEGAME_H  
  2.  #define _BASEGAME_H  
  3.     
  4.  namespace WuguiEngine  
  5.  {  
  6.      //前置聲明  
  7.      class IUpdatable;  
  8.     
  9.      //前置聲明  
  10.     namespace Graphics  
  11.     {  
  12.         class GraphicsDevice;  
  13.     }  
  14.       
  15.     //前置聲明  
  16.     namespace Core  
  17.     {  
  18.         class TimeUsed;  
  19.     }  
  20.    
  21.     //簡化的寫法,GraphicsDevice可以在下面的代碼中直接使用  
  22.     //GraphicsDevice與WuguiEngine::Graphics::GraphicsDevice等價  
  23.     //注意:如果不加上下面這行,WuguiEngine::Graphics不能省略  
  24.     using Graphics::GraphicsDevice;  
  25.    
  26.     class BaseGame : virtual public IDisposed,   
  27.         virtual public IRenderable  
  28.     {  
  29.         // add definition  
  30.     }  
  31. }  
  32.    
  33. #endif 

上面的代碼簡單的說明了namespace的一些基本的用法,該段代碼取自BaseGame.H的文件,在class BaseGame中,用到了來自不同的命名空間下的IUpdatable, GraphicsDevice等類.具體的內容可以先看看代碼里面的注釋

在需要在BaseGame.H中包含這些類的頭文件的同時,需要加上這些類的前置聲明,如果不加會出現一些詭異的編譯錯誤(有些問題可能也是在于我比較不了解c++),反正我覺得使用using namespace ...并不是一個很好的做法,不如using XXX::YYY::ZZZ來得準確(這里也希望高手來拍磚指點一下.

繼承

1)virtual繼承

在繼承接口(只具有純虛函數的類)的時候最好為繼承的方法加上virtual的說明(參考上面一段的代碼,IUpdatable與IDisposed就是接口,主要的原因是在于c++的多重繼承機制,假如A與B都繼承自IInterface,C又繼承自A,B,那么普通的繼承方式則會在C類中保存兩個IInterface的副本.

而virtual繼承就有區別了,virutal繼承告訴編譯器:"我繼承的是一個純接口!",這樣只會保存一個副本.

2)多種繼承方式

大家知道,C++對于繼承的方式有很多的修飾,有public, private, protected,而且還可以加入virtual關鍵字.在c++中,public繼承與在c#中的繼承是沒有區別的,而其他幾種繼承是具有理論的價值,而實際中的應用得非常非常的少,這里就不再贅述了.

3)實驗:重寫虛函數

下面做一個簡單的實驗,看看c++與c#在重寫虛函數時候調用基類的虛函數的時候的情況,大家自己可以對比一下c#.測試代碼:

 

  1. #include < iostream>  
  2.  using namespace std;  
  3.      
  4.   class Base  
  5.   {  
  6.   public:  
  7.       virtual void Func() { cout < <  "Hello Earth" < <  endl; }  
  8.  };  
  9.      
  10.  class Derived : public Base  
  11.  {  
  12.  public:  
  13.      virtual void Func() { cout < <  "Hello World" < <  endl; }  
  14.  };  
  15.     
  16.  int main()  
  17.  {  
  18.      Base* p1 = new Base();  
  19.      p1->Func();  
  20.     
  21.      Base* p2 = new Derived();  
  22.      p2->Func();  
  23.  }  

輸出:

              Hello Earth

              Hello World

而在將Base的Func()改為純虛函數之后,在Base* p1 = new Base()這句話上出現編譯錯誤,提示不能實例化抽象類. 而對于p2的調用時正常的

下面繼續深入我們的實驗,三個類依次繼承,爺爺類具有一個純虛函數,爸爸類什么都不寫,兒子類重寫該函數,都使用virtual public繼承: 

  1. #include < iostream>  
  2.  using namespace std;  
  3.     
  4.  class Base  
  5.  {  
  6.  public:  
  7.      virtual void Func() = 0 ;  
  8.   };  
  9.      
  10.  class Derived : virtual public Base  
  11.  {  
  12.     
  13.  };  
  14.     
  15.  class DerivedDerived : virtual public Derived  
  16.  {  
  17.  public:  
  18.      virtual void Func() { cout < <  "Hello World" < <  endl; }  
  19.  };  
  20.     
  21.  int main()  
  22.  {  
  23.      Base* p1 = new DerivedDerived();  
  24.      Derived* p2 = new DerivedDerived();  
  25.     
  26.      p1->Func();  
  27.      p2->Func();  
  28.  }  

輸出結果都是"Hello World"

今天也有點晚了,明天還要坐火車,從c#到c++的問題先寫到這里,各位晚安,歡迎提出意見 :-D

【編輯推薦】

  1. C#事件和委托的編譯代碼
  2. C#事件的由來
  3. 學習C#委托:將方法綁定到委托
  4. 學習C#委托:將方法作為方法的參數
  5. C# 插件構架實例詳解
責任編輯:book05 來源: 博客園
相關推薦

2009-06-15 17:05:03

C#基元類型

2011-05-10 14:14:10

OSPF路由

2011-05-10 14:32:19

OSPF路由

2011-10-20 09:57:58

AS400 FTPFTP

2010-10-09 17:19:50

mysql存儲過程

2009-08-27 16:03:31

從c#到c++

2011-04-14 10:46:23

2009-10-13 14:56:00

CCNA培訓

2009-12-25 10:59:08

WPF Timer

2023-10-10 08:01:13

2011-08-09 15:10:00

SQLite

2010-07-26 13:05:44

Perl子程序參數

2011-07-13 17:57:15

SQLite

2010-09-13 14:43:47

無線技術常見問題

2009-10-27 11:10:56

linux問題解答

2009-12-03 18:09:51

Visual Stud

2011-07-21 11:19:51

JAVA

2013-05-23 09:49:49

Chrome for google

2011-03-30 14:44:28

MRTG

2020-10-22 07:22:41

物聯網網關物聯網IOT
點贊
收藏

51CTO技術棧公眾號

欧美极品欧美精品欧美图片| 动漫3d精品一区二区三区| 亚洲成人黄色av| 精品美女一区| 一级日本不卡的影视| 美日韩免费视频| 一级片免费观看视频| 国产精品二区影院| 一区二区三区黄色| 99免费观看视频| 激情亚洲影院在线观看| 亚洲靠逼com| 欧美极品一区二区| 99精品视频免费看| 免费永久网站黄欧美| 久久韩国免费视频| 中文字幕 日本| 欧美激情三区| 懂色av一区二区三区| 中文精品视频一区二区在线观看| 亚洲乱码在线观看| 日本不卡高清视频| 69影院欧美专区视频| 亚洲综合视频网站| 少妇精品久久久一区二区三区| 欧美精品自拍偷拍| 国产精品免费观看久久| 欧美日韩经典丝袜| 国产精品白丝在线| 欧美亚洲免费高清在线观看| 亚洲精品久久久狠狠狠爱| 免费在线成人网| 欧美一级片在线播放| 91视频免费在线看| 99久久综合| 亚洲视频国产视频| 极品粉嫩小仙女高潮喷水久久| 亚洲欧美综合久久久久久v动漫| 精品久久久香蕉免费精品视频| 国产日韩欧美大片| 一广人看www在线观看免费视频| 99视频有精品| 国产精品sss| av免费观看在线| 久久av中文字幕片| 国产在线精品一区免费香蕉| 日韩黄色片网站| 久久九九99| 国产91对白在线播放| 国产精品成人aaaa在线| 欧美日韩国产一区精品一区| 日韩有码视频在线| 少妇视频一区二区| 色中色综合网| 视频在线观看一区二区| 超薄肉色丝袜一二三| 欧美一区2区| 亚洲欧美在线第一页| 午夜男人的天堂| 懂色av一区二区| 亚洲成人999| 丰满岳乱妇一区二区| 精品亚洲免a| 亚洲第一av在线| 欲求不满的岳中文字幕| 日韩在线影视| 亚洲欧美一区二区三区久久 | 精品女同一区二区| aaaaa黄色片| jizz国产精品| 日韩久久精品电影| 国产美女免费无遮挡| 精品国产乱码久久久久久果冻传媒 | 91伊人久久大香线蕉| 精品欧美一区二区久久久伦 | 国产精品3区| 91麻豆精品91久久久久同性| 深夜做爰性大片蜜桃| 一区二区在线免费播放| 欧美精品一区男女天堂| 97超碰在线免费观看| 欧美色女视频| 久久精品中文字幕电影| 国产在线观看免费视频今夜| 亚洲美女黄色| 国产91色在线播放| 99精品视频免费看| 99精品欧美一区二区三区小说| 日本一区免费看| 亚洲s色大片| 亚洲一级电影视频| 男女曰b免费视频| 96视频在线观看欧美| 日韩一级完整毛片| 成人免费看aa片| 久久久久久久久久久妇女| 九九久久久久99精品| 最近免费中文字幕大全免费版视频| 日韩影院精彩在线| 91gao视频| 青青青草原在线| 亚洲日本成人在线观看| 国产素人在线观看| 久久91超碰青草在哪里看| 精品国产一区二区精华| 亚洲欧美va天堂人熟伦| 欧美午夜久久| 国产精品主播视频| 性xxxx视频| 亚洲啪啪综合av一区二区三区| 精品视频免费在线播放| 韩国三级成人在线| 亚洲精品中文字幕av| 国内偷拍精品视频| 久久久亚洲人| 国产精品一区二区三区在线| 欧美69xxxx| 色综合一个色综合亚洲| 久久久精品人妻一区二区三区| 欧美日韩一二| 97香蕉久久夜色精品国产| 97人妻精品一区二区三区视频| 久久综合久久综合久久综合| 国产精品igao激情视频| 亚洲ww精品| 亚洲人成电影网站色| 国产一级免费观看| 国产一区二区三区精品欧美日韩一区二区三区 | 国产精品毛片大码女人| 久久精品99国产| 国产精品极品| 欧美激情免费在线| 99久久久久久久| 亚洲欧洲日韩综合一区二区| 精品久久久久久无码国产| 欧美大奶一区二区| 欧美高清激情视频| 国产情侣自拍小视频| 中文字幕中文字幕一区二区| 亚洲高清免费在线观看| 精品一区亚洲| 26uuu久久噜噜噜噜| 蜜桃久久一区二区三区| 一区二区三区**美女毛片| 国产乱叫456| 午夜精品视频一区二区三区在线看| 国产精品黄视频| 九色在线视频| 色婷婷av一区二区三区软件 | 亚洲小说图片视频| 91精品国产免费久久久久久| 欧洲精品久久一区二区| 亚洲高清在线视频| 国产成人精品一区二区三区在线观看| 亚洲精品极品少妇16p| 成人福利视频在线观看| 男人在线资源站| 欧美卡1卡2卡| 欧美激情图片小说| 大桥未久av一区二区三区中文| 日本国产中文字幕| 最新国产精品精品视频| 国外成人免费在线播放| 农村少妇久久久久久久| 精品久久久久久中文字幕一区奶水 | 18视频在线观看娇喘| 欧美经典一区| 久久久久久久一区二区三区| 色窝窝无码一区二区三区成人网站| 午夜一区二区三区视频| 午夜一区二区三区免费| 丝袜美腿亚洲色图| 中文字幕一区二区三区在线乱码| 精品国产麻豆| 久久久影视精品| 欧美女子与性| 欧美日韩国产另类不卡| 久一区二区三区| 91免费视频网址| 天天干天天草天天| 欧美暴力喷水在线| 乱一区二区三区在线播放| 激情亚洲小说| 久久久欧美精品| 深夜福利视频一区| 欧美日韩国产高清一区二区| 青草影院在线观看| 99久久99久久综合| 国内外成人免费在线视频| 欧美日韩 国产精品| 欧美不卡在线一区二区三区| 日韩成人免费av| 欧美激情乱人伦| av资源在线观看免费高清| 日韩亚洲欧美在线| 亚洲中文字幕无码爆乳av | 曰韩不卡视频| 黄色成人美女网站| 国产精品视频免费观看www| 欧美家庭影院| 中文字幕亚洲欧美日韩高清| 亚洲黄色小说网址| 欧美日韩亚洲丝袜制服| 日本三级中文字幕| 亚洲人成7777| 欧美 日韩 国产 成人 在线观看| 国产suv精品一区二区6| 亚洲第一中文av| 99亚洲一区二区| 大桥未久一区二区| 日韩精品电影| 久久久久一区二区| 色妞ww精品视频7777| 国产精品老牛影院在线观看| 日韩激情电影免费看| 久久91超碰青草是什么| 黄色网页在线播放| 亚洲最大中文字幕| 性xxxx视频| 亚洲国产欧美一区二区三区同亚洲 | 伊人久久亚洲热| 青青视频免费在线观看| 久久亚洲国产| 亚洲精品视频一二三| 一本色道久久综合亚洲精品酒店| 波多野结衣精品久久| 九九九九九九精品任你躁| 国产精品视频大全| 精品123区| 国产成人精品在线播放| 亚洲欧洲美洲av| 91精品国产成人www| av在线理伦电影| 久久99精品视频一区97| 国产在线高清理伦片a| 一本色道久久综合狠狠躁篇的优点| 色wwwwww| 日韩欧美第一页| 日韩黄色a级片| 亚洲另类色综合网站| √天堂中文官网8在线| 欧美激情在线观看视频免费| 日韩 中文字幕| 91网上在线视频| 成人做爰69片免费| 激情六月婷婷久久| 国产h视频在线播放| 国内精品久久久久久久97牛牛| www亚洲国产| 日韩午夜电影网| 亚洲精品中文字幕在线| 精品久久国产| 日本亚洲自拍| 成人情趣视频| 亚洲高清视频一区| 精品美女久久久| 亚洲区一区二区三区| 欧美伦理影院| 色999日韩自偷自拍美女| 成人高清电影网站| 亚洲国产欧洲综合997久久 | 国产一区二区0| 日日干日日操日日射| 国产精品羞羞答答xxdd| 亚洲国产日韩在线一区| 国产精品小仙女| 欧美 变态 另类 人妖| 26uuu亚洲综合色欧美| 草草影院第一页| 久久久久久电影| 日本成人免费在线观看| 亚洲视频中文字幕| 国产又粗又猛又爽又黄的视频小说| 中文字幕日韩一区| 精品自拍偷拍视频| 一区av在线播放| 91video| 欧美日韩亚洲综合在线| 国产日韩免费视频| 亚洲毛片在线看| 久热av在线| 日日狠狠久久偷偷四色综合免费| 欧美videos另类精品| 欧美一区第一页| 国产精品高潮久久| 国产精品v欧美精品∨日韩| 成人福利一区| 欧美系列一区| 狠狠综合久久| 日韩网址在线观看| 久久国产婷婷国产香蕉| v天堂中文在线| 久久精品亚洲国产奇米99| 岛国片在线免费观看| 天天做天天摸天天爽国产一区| 999视频在线| 555www色欧美视频| 免费毛片在线| 久青草国产97香蕉在线视频| 99thz桃花论族在线播放| 国产热re99久久6国产精品| 亚洲三级av| 欧美午夜精品理论片a级大开眼界| 欧美一区成人| 午夜精品久久久内射近拍高清| 另类小说一区二区三区| 国模无码视频一区| 国产欧美视频在线观看| 99精品视频99| 欧美乱熟臀69xxxxxx| 性xxxxbbbb| 欧美韩日一区二区| 国产精品字幕| 99porn视频在线| 91视频一区| 欧美一级在线看| 韩国精品一区二区| 欧美成人午夜精品免费| 136国产福利精品导航| 免费黄色片视频| 亚洲第一天堂av| 日本在线免费播放| 国产精品高潮呻吟久久av黑人| 免费看日产一区二区三区| 蜜桃麻豆www久久国产精品| 亚洲国产日韩欧美一区二区三区| 久久出品必属精品| 国产精品福利一区| 凹凸精品一区二区三区| 亚洲精品国产精品久久清纯直播| 成人在线免费看| 日产日韩在线亚洲欧美| 好吊妞国产欧美日韩免费观看网站| 久久综合亚洲精品| 日本亚洲最大的色成网站www| 伦理片一区二区| 亚洲午夜激情网站| 国产老女人乱淫免费| 最近2019中文字幕mv免费看| 激情国产在线| 鲁鲁狠狠狠7777一区二区| 最新国产拍偷乱拍精品| 国产日韩视频一区| 一区二区不卡在线播放| 国产偷拍一区二区| 久久成年人视频| 国产成人免费av一区二区午夜| 日韩精品一区二区三区丰满 | 国产欧美日韩在线看| 黄色网址中文字幕| 亚洲片av在线| 69堂免费精品视频在线播放| 欧美一区亚洲二区| 久久精品动漫| 精品无码人妻一区二区免费蜜桃| 精品国产精品三级精品av网址| 五月天婷婷视频| 国产91在线播放精品91| 久久99国产精品视频| 中文久久久久久| 国产亲近乱来精品视频| 色老头在线视频| 久久久精品一区二区三区| 亚洲伊人精品酒店| 国产精品国三级国产av| 成人午夜又粗又硬又大| 香蕉视频一区二区| 亚洲欧美日韩国产中文专区| 欧美××××黑人××性爽| 久久av一区二区三区亚洲| 日本网站在线观看一区二区三区 | 亚洲成人av中文字幕| 国产精品国精产品一二| 国内一区二区在线视频观看| 日韩精品电影在线观看| 天天爽天天爽天天爽| 日韩久久免费av| 黄色污网站在线观看| 欧美日韩亚洲一区二区三区在线观看 | 国产成人亚洲欧美| 国产亚洲高清视频| 少妇精品一区二区三区| 欧美日韩成人在线一区| 日日夜夜天天综合入口| 久久国产精品一区二区三区| 久久久久看片| 搜索黄色一级片| 精品一区二区三区四区在线| 999国产精品亚洲77777| 999久久欧美人妻一区二区| 97久久精品人人爽人人爽蜜臀 | 黄色成人在线网站| 一区二区精品免费| 欧美一区永久视频免费观看| 国内激情视频在线观看| 亚洲一区三区| 成人精品国产福利| 夜夜骚av一区二区三区| 欧美激情一级二级| 日韩片欧美片|