C++ VS C#(4):枚举,结构体

Tags: 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

本文链接:http://www.4byte.cn/learning/67112.html



相关文章