程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> C語言 >> C++ >> C++入門知識 >> C++ VS C#(4):枚舉,結構體

C++ VS C#(4):枚舉,結構體

編輯:C++入門知識

//=====================================================================
//TITLE:
//    C++ VS C#(4):枚舉,結構體
//AUTHOR:
//    norains
//DATE:
//    Tuesday  7-December-2010
//Environment:
//    Visual Studio 2010
//    Visual Studio 2005
//=====================================================================

1. 枚舉

    無論是C++還是C#都采用enum來聲明一個枚舉類型,比如:view plaincopy to clipboardprint?
enum Format  
{  
RGB888,  
RGB565,  
}; 
enum Format
{
RGB888,
RGB565,
};

    但在使用上,卻大相徑庭。對於C++來說,可以直接使用定義的類型,而C#則必須增加一個.標示,如:view plaincopy to clipboardprint?
//C++  
Format format = RGB888;  
 
//C#  
Format format = Format.RGB888; 
//C++
Format format = RGB888;

//C#
Format format = Format.RGB888;


    這樣看來,C#似乎繁瑣一點,還要相應的類型定義;但這樣卻帶來另外一個好處,就是同一命名空間裡面的不同的enum類型可以有相同的數值,如:view plaincopy to clipboardprint?
enum Format  
{  
    RGB888,  
    RGB565,  
};  
 
enum Format2  
{  
    RGB888,  
    RGB565,  

enum Format
{
    RGB888,
    RGB565,
};

enum Format2
{
    RGB888,
    RGB565,
}


    這段代碼在C#中能夠順利編譯,在C++中會提示如下錯誤:error C2365: RGB888 : redefinition; previous definition was enumerator};

    C++中的enum本質只是一組數值的集合,名稱也僅僅是數值的標識,但對於C#而言,卻又向前跨進了一步,enum還可以獲得相應的名稱字符串,如:view plaincopy to clipboardprint?
string strFormat = Format.RGB888.ToString(); 
string strFormat = Format.RGB888.ToString();

    不僅可以使用成員函數,還可以使用全局的Convert函數,如:view plaincopy to clipboardprint?
string strFormat = Convert.ToString(Format.RGB888); 
string strFormat = Convert.ToString(Format.RGB888);

    更為有意思的是,除了數值類型,string也能轉換為enum類型,如:view plaincopy to clipboardprint?
Format format = (Format)Enum.Parse(typeof(Format), "RGB888"); 
Format format = (Format)Enum.Parse(typeof(Format), "RGB888");

    不過需要注意,這裡的字符串也是大小寫敏感,如果該轉換的字符串不在enum類型的名稱之列,則會出錯。


2. 結構體

    在C++中,類和結構體是一致的,唯一的區別在於,類默認的訪問域是private,而類是public。但對於C#來說,結構體的成員默認訪問域為private,如果要指定public,則必須每個成員變量都指定,如:view plaincopy to clipboardprint?
struct Size  
{  
   public int x;  
   public int y;  
 }; 
struct Size
{
   public int x;
   public int y;
 };

    可能熟悉C++的朋友會覺得這樣寫有點麻煩,C#裡面能不能也像C++這樣:view plaincopy to clipboardprint?
struct Size  
{  
  public:  
int x;  
int y;  
 }; 
struct Size
{
  public:
int x;
int y;
 };

    但很可惜,這種寫法是在C#中是不成立的。簡單點來記憶,C#關於結構體的語法,都可以完整移植到C++中,反之則不成立。

 

本文來自CSDN博客,轉載請標明出處:aspx">http://blog.csdn.net/norains/archive/2010/12/10/6067276.aspx

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved