本篇文章是关于VC++ 2005入门经典中的类型系统讲解,由李建忠高级讲师于2005年4月28日进行分享。主要内容分为以下几个部分:
1. 统一的CLI类型系统:
C#语言集成(CLI)引入了一种统一的类型系统,它将所有类型分为两大类:值类型和引用类型。这有助于代码的可移植性和管理复杂性。
2. 值类型:
- **基本类型**:包括内置的基本数据类型,如整型、浮点型等。
- **自定义值类型**:通过`struct`定义的用户自定义类型,如`valuestructPoint`,包含成员变量如`x`和`y`。
- **枚举类型**:用`enum`关键字声明的类型,如`enum class Color`,包含了预定义的枚举常量。
3. 引用类型:
- **内建引用类型**:如`Object^`和`String^`,用于引用托管堆中的对象,如`Object^o = nullptr`和`String^s = "Hello,C++/CLI"`。
- **自定义引用类型**:使用`ref struct`关键字定义的类型,如`refstruct Circle`,实现了接口`IShape`。
- **数组类型**:通过`array<T>`声明动态数组,如`array<int>^a = gcnewarray<int>(10)`。
- **装箱值类型**:`int^`这种引用类型用于包装值类型以适应托管环境,如`int^hint = gcnew int(100)`。
- **委托**:通过`delegate`关键字定义的函数指针,如`MyDelegate^d = gcnew MyDelegate(c, &Circle::Draw)`,用于封装方法调用。
- **接口**:`interface`定义的行为规范,如`interface class IShape`,`Circle`实现了这个接口。
- **指针**:虽然不是标准的C++概念,但在CLI中也有所提及,如`interior_ptr<int> p = &c->radius`,这是对托管内存的底层操作。
4. 区分值类型与引用类型:
- 值类型存储实际的数据,它们在栈上分配,如`Point`实例。
- 引用类型则是对堆上对象的引用,实例存储的是对象的地址,而非数据本身。
5. 装箱与反装箱(boxing and unboxing):
对于值类型,有时需要转换为引用类型以便与.NET框架交互,这就是装箱;反之,将引用类型转换回值类型的过程称为反装箱。
这篇文章深入浅出地介绍了VC++ 2005中的类型系统,包括基本类型、自定义类型、引用类型及其各种用法,对于理解和使用C++/CLI语言开发者来说,是理解和学习C++编程的重要参考资料。