C#和C++的主要區別

算是一篇學習筆記吧。記錄一下學習中的感受,以便日後查詢。

1 cs中的所有類都派生於同一個稱作System.Objecet的基類。cpp沒有這麼一個基類,但vc中有一個祖先類CObject類,與cs不同的是,用戶自定義的類可以不從它繼承。

2 c#中定義一個實例時,如果是數值型,則在棧上創建;如果是引用型,則在堆上創建。cpp中,如果是 myclass m_object;則是在棧上創建;如果是myclass m_object=new myclass();則是在堆上創建。

                                                                                                                                 修改於2006年4月14日。

3 對於要到執行時才能獲取的常量,cs中提供了只讀屬性的解決方案。這種屬性只能在構造函數中初始化,初始化後再次不能修改。例如在變量聲明中寫:public readonly int myVaule;如果希望常量只讀屬性是靜態的則按照如下聲明:public static readonly int myValue;但這種靜態公有屬性要在一種叫靜態構造函數的構造函數中聲明(說的有些羅嗦:))靜態構造函數的寫法 static myClassname(){myValue=0;}。而在cpp中沒有這些新東西。似乎c#是cpp的資料篇。呵呵!

                                                                                                                                

4 對於函數參數的定義有兩種方案:一是值傳遞,這種傳遞不改變實參的值。函數首先把實參的數值拷貝到形參中,然後進行對形參進行操作。二是引用傳遞或是指針傳遞,這種方案不是把實參的值拷貝給形參,而是把實參的指針或引用拷貝給形參,於是對形參的操作就轉爲了對實參的操作。這種操作會改變實參的值。在下列3種情況下適合將函數參數定義爲引用(注:這三條摘自與c++prime中文版第三版284頁):一、必須改變成指針來允許改變實參的值時。二、向主函數返回而外的結果。三、向函數傳遞大對象。當運用第三條時,用戶可能只是想傳遞大對象,但不希望改變實參的值,這時就要用到const型的引用。

C++中的寫法

值傳遞 : void myfunc(int pa1,int pa2);

指針傳遞:void myfunc(int *pa1,int * pa2);

引用傳遞:void myfunc(int &pa1,int &pa2);

常引用傳遞:void myfunc(const int &pa1,const int &pa2);

C#中的寫法:

使用ref引用傳遞: void myfunc(ref int a,ref int b);

使用out引用傳遞: void myfunc(out int a,out int b);

ref和out的區別:使用ref時在調用函數前必須把實參初始化,out不必。也就是說ref用於函數需要實參有值得情況。

                                                                                                                         

5 對於屬性的讀取。C++中一般把屬性定義成私有,然後再定義公有的接口對這個私有成員進行操作。C#中把C++中的屬性成爲字段,然後又定義了一個概念叫屬性。屬性和字段通過C#提供的接口進行傳遞。用戶對屬性直接進行操作,然後調用上面說的接口函數傳遞給字段。好處就是更直觀,給人的感覺似乎是直接操作C++中的私有成員變量,但其實是通過藉口函數。

                                                                                                                                  修改於2006年4月17日。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章