[理学]VC++:类型系统-20050428.ppt

  1. 1、本文档共31页,可阅读全部内容。
  2. 2、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
[理学]VC:类型系统-20050428

* * VC++ 2005:类型系统 李建忠 上海祝成科技 高级讲师 2005年4月28日 Agenda 统一的CLI类型系统 指针类型 集成ISO-C++类型 讲座总结 QA CLI类型系统 CTS将所有的类型划分为两类:值类型与引用类型 值类型:内建值类型(基本类型)、自定义值类型、枚举类型。 引用类型:内建引用类型(Object和String),自定义引用类型,数组类型,装箱值类型,委托,接口,指针 值类型-基本类型 值类型-自定义值类型 value struct Point { // 自定义值类型 int x; int y; }; 值类型-枚举类型 enum class Color { Red, Green, Blue }; 引用类型-内建引用类型 Object^ o=nullptr; // Object, 内建引用类型 String^ s=Hello, C++/CLI; // String, 内建引用类型 引用类型-自定义引用类型 ref struct Circle: IShape {   Point centre; int radius; void Draw(){…} }; Circle^ c=gcnew Circle(); 引用类型-数组类型 arrayint^ a= gcnew arrayint(10); 引用类型-装箱值类型 int^ hint=gcnew int(100); 引用类型-委托 delegate void MyDelegate(); MyDelegate^ d=gcnew MyDelegate(c,Circle::Draw); 引用类型-接口 interface class IShape { void Draw(); }; 引用类型-指针 interior_ptrint p=c-radius ; 值类型与引用类型 值类型直接包含数据。值类型的实例通常被分配在栈上 引用类型的实例仅包含指向位于托管堆中对象的句柄 值类型的box与unbox 值类型实例可以通过box/unbox来在栈和托管堆之间转换 int i = 123; Object^ o = i; // box int j = static_castint(o); // unbox 强类型的装箱值类型 强类型的装箱值类型可以省去unbox环节来访问值类型上的成员 int^ hint=gcnew int(100); Agenda 统一的CLI类型系统 指针类型 集成ISO-C++类型 讲座总结 QA ISO-C++中的指针 ISO-C++中的指针得以保留,维持原来语义不变 指针的变化主要是由于托管堆的引入,所有牵扯到托管堆的指针都改变了形态和语义 追踪句柄 R^ r1 = gcnew R; 追踪句柄,指向托管堆上“整对象( the whole object)”的指针 内部指针 value struct V { int data; }; V v; interior_ptrV pv = v; pv-data = 42; interior_ptrint pi = v.data; 内部指针,指向托管堆上“对象所包含的数据成员”的指针 固定指针 ref struct R { int data; 20 }; R^ r = gcnew R; { pin_ptrint ppi = r-data; } 固定指针,固定托管堆上“对象所包含的数据成员”的指针,使之不能被垃圾收集控制 Agenda 统一的CLI类型系统 指针类型 集成ISO-C++类型 讲座总结 QA 基本类型的集成 双重身份,透明集成 ISO-C++基本类型在C++/CLI中有同样位长的System类型相对应 字符串的集成 明示类型的字符串类型遵循各自语言规范的定义 字符串字面常量既是const char[] ,同时也是System::String 自定义类型的集成 将所有ISO-C++中的自定义类型直接转换为CLI值类型的定义 直接通过位操作来访问原来ISO-C++中类型的数据成员 将所有成员函数用IL代码编译为全局函数 通过传递this指针来实现实例函数的调用 Agenda 统一的CLI类型系统 指针类型 集成ISO-C++类型 讲座总结 QA 讲座总结 C++/CLI支持最为强大和完备的托管类型系统 类型反映对象模型,掌握C++/CLI类型的核心是掌握其对象模型 CLI类型与ISO-C++类型之区别——类型描述,metadata

文档评论(0)

hhuiws1482 + 关注
实名认证
内容提供者

该用户很懒,什么也没介绍

版权声明书
用户编号:5024214302000003

1亿VIP精品文档

相关文档