- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
ref class Shape { public: virtual void draw() abstract; … }; ref class Circle : public Shape { public: virtual void draw() override; … }; void Circle::draw() { … } 或 在旧版本的 MC++ 中,托管类型或结构定义关键字是: __gc class 或 __gc struct,值类型或结构定义关键字是: __value class 或 __value struct。 例如: public __gc class MyRefClass { }; public __gc struct MyRefStruct { }; public __value class MyValClass { }; public __value struct MyValStruct { }; 在托管类定义中,定义在 System 命名空间中的类型 Object 总 是被作为缺省基类。所有的系统内建简单数据类型都是从 System 命名空间中的类型 ValueType 继承的。而 ValueType 是 从 Object 继承的。也就是说,托管类型总是 Object 的派生类 型,即总可通过 Object 类型句柄 ^ 访问任何托管类对象。 所有的简单数据类型的值都可以赋值给一个“Object 句柄”类型 的变量。这个赋值过程称为装箱转换。在装箱转换中,位于 堆栈上的简单数据的值被复制到托管堆上新创建的该简单数 据类型对象上,使这个简单数据类型的值可以按照 Object 类 型进行操作。装箱转换既可以显式地进行,也可以隐式地进 行,如下面的代码所示: int i = 5; // create an int value on the stack // explicitly box the int value Object ^object1 = static_cast Object^ ( i ); // imexplicitly box the int value Object ^object2 = i; 拆箱转换可以把一个“Object 句柄”类型变量显式转换为一个简 单数据类型值,如下面代码所示: int x = static_cast int ( object1 ); 如果一个“Object 句柄”并没有引用简单数据值(未在托管堆中 创建托管对象),试图显式地对这个“Object 句柄”类型变量进 行拆箱转换将导致一个 InvalidCastException 异常。 另外,如果创建一个简单数据类型的句柄,可以简单地如下 对这个句柄进行解引用: int i = 5; // create an int value on the stack int ^intObject = i; // imexplicitly box the int value in an int object int x = *intObject; // imexplicitly unbox the int object 这里,并没有使用 Object 句柄,而是使用一个 int 句柄。因此,可以通过对 intObject 进行解引用隐式地执行拆箱,而不 需要显式的类型转换。 对简单数据类型值的的装箱转换和拆箱转换也同样适用于用 户自定义的值类型,因为使用 value class 定义一个值类型 时,它将自动继承于 ValueType 类型。 在旧版本的 MC++ 中,用关键字 __box 在托管堆中创建一个托 管类型对象,并将值类型值赋值到所创建的托管对象中,然 后返回该托管对象,从而实现装箱转换。例如实现 int 类型变 量 i 的值的装箱转换代码如下: __box( i ); 2 托管类型的数据成员 组成: 托管类型的数据成员类型可以包括: 托管值类型的对象、句柄 ^、*指针, 托管引用类型的对象、句柄 ^, C++ 类型的对象、引用、*指针。 可访问性: 托管类型的数据成员与 C++ 类型的数据成员在可访问性 的种类、声明规则和缺省访问性方面完全相同。 可访问性的种类:private、public 和 protected 。 可访问性的声明规则:允许分段声明多个数据成员的可 访问性,或单独为每个数据成员声明可访问性。 只不过 在托管类型的定义中更提倡对每个数据成员都单独显式 说明可访问性。 可访问性的缺省值:类数据成员的缺省可访问性为
文档评论(0)