C++ VS C#(4):枚举,结构体
2010-12-10 11:27
239 查看
//=====================================================================
//TITLE:
// C++ VS C#(4):枚举,结构体
//AUTHOR:
// norains
//DATE:
// Tuesday 7-December-2010
//Environment:
// Visual Studio 2010
// Visual Studio 2005
//=====================================================================
1. 枚举
无论是C++还是C#都采用enum来声明一个枚举类型,比如:
但在使用上,却大相径庭。对于C++来说,可以直接使用定义的类型,而C#则必须增加一个.标示,如:
这样看来,C#似乎繁琐一点,还要相应的类型定义;但这样却带来另外一个好处,就是同一命名空间里面的不同的enum类型可以有相同的数值,如:
这段代码在C#中能够顺利编译,在C++中会提示如下错误:error C2365: 'RGB888' : redefinition; previous definition was 'enumerator};
C++中的enum本质只是一组数值的集合,名称也仅仅是数值的标识,但对于C#而言,却又向前跨进了一步,enum还可以获得相应的名称字符串,如:
不仅可以使用成员函数,还可以使用全局的Convert函数,如:
更为有意思的是,除了数值类型,string也能转换为enum类型,如:
不过需要注意,这里的字符串也是大小写敏感,如果该转换的字符串不在enum类型的名称之列,则会出错。
2. 结构体
在C++中,类和结构体是一致的,唯一的区别在于,类默认的访问域是private,而类是public。但对于C#来说,结构体的成员默认访问域为private,如果要指定public,则必须每个成员变量都指定,如:
可能熟悉C++的朋友会觉得这样写有点麻烦,C#里面能不能也像C++这样:
但很可惜,这种写法是在C#中是不成立的。简单点来记忆,C#关于结构体的语法,都可以完整移植到C++中,反之则不成立。
//TITLE:
// C++ VS C#(4):枚举,结构体
//AUTHOR:
// norains
//DATE:
// Tuesday 7-December-2010
//Environment:
// Visual Studio 2010
// Visual Studio 2005
//=====================================================================
1. 枚举
无论是C++还是C#都采用enum来声明一个枚举类型,比如:
enum Format { RGB888, RGB565, };
但在使用上,却大相径庭。对于C++来说,可以直接使用定义的类型,而C#则必须增加一个.标示,如:
//C++ Format format = RGB888; //C# Format format = Format.RGB888;
这样看来,C#似乎繁琐一点,还要相应的类型定义;但这样却带来另外一个好处,就是同一命名空间里面的不同的enum类型可以有相同的数值,如:
enum Format { RGB888, RGB565, };
enum Format2
{
RGB888,
RGB565,
}
这段代码在C#中能够顺利编译,在C++中会提示如下错误:error C2365: 'RGB888' : redefinition; previous definition was 'enumerator};
C++中的enum本质只是一组数值的集合,名称也仅仅是数值的标识,但对于C#而言,却又向前跨进了一步,enum还可以获得相应的名称字符串,如:
string strFormat = Format.RGB888.ToString();
不仅可以使用成员函数,还可以使用全局的Convert函数,如:
string strFormat = Convert.ToString(Format.RGB888);
更为有意思的是,除了数值类型,string也能转换为enum类型,如:
Format format = (Format)Enum.Parse(typeof(Format), "RGB888");
不过需要注意,这里的字符串也是大小写敏感,如果该转换的字符串不在enum类型的名称之列,则会出错。
2. 结构体
在C++中,类和结构体是一致的,唯一的区别在于,类默认的访问域是private,而类是public。但对于C#来说,结构体的成员默认访问域为private,如果要指定public,则必须每个成员变量都指定,如:
struct Size { public int x; public int y; };
可能熟悉C++的朋友会觉得这样写有点麻烦,C#里面能不能也像C++这样:
struct Size { public: int x; int y; };
但很可惜,这种写法是在C#中是不成立的。简单点来记忆,C#关于结构体的语法,都可以完整移植到C++中,反之则不成立。
相关文章推荐
- C++ VS C#(4):枚举,结构体
- C++ VS C#(5):数组
- C#基础-结构、枚举和数组(Day4)
- C#基础学习笔记--数据类型,值类型,结构类型,枚举类型
- C#调用C++写的代码(VS2015)
- C++ VS C#(2):字符串,命名空间
- C++ VS C#(7):指向函数的指针和委托
- C++联合体转换成C#结构的实现方法
- C#笔记(结构和枚举)
- C++ VS C#(1):注释,变量,控制台输出
- c# vs c++
- vc(vs)中c++调用C#的DLL
- C++与C#对常用数据结构封装的对比(STL vs System.Collections.Generic)[转自柒笑侠]
- C++ VS C#(1):注释,变量,控制台输出
- C++ VS C#(2):字符串,命名空间
- C#传递结构体地址(或者结构体成员的地址)给C/C++ DLL
- 编写高效的C#图像处理程序(4) Rgb=>Lab,C# vs. C++(VC)
- C++与C#对常用数据结构封装的对比(STL vs System.Collections.Generic)
- C++ VS C#(7):指向函数的指针和委托
- C++联合体转换成C#结构