快速业务通道

实例解析C++/CLI之值类型

作者 佚名技术 来源 程序设计 浏览 发布时间 2012-06-30
p4 = {0}", p4);
  p2 = p1;
  Console::WriteLine("p2 = {0}", p2);
}

第一次运行后,4个Point的输出如下:

Point p1, p2(3,7), p3(9,1), p4 = p2;
p1 = [0](0,0)
p2 = [0](3,7)
p3 = [1](9,1)
p4 = [0](3,7)

Point p1由默认构造函数创建,它的ID为零,但却恰好也是第一个Point的正确ID值,默认的坐标值也为零。而p2用到了自己编写的构造函数,其分配了一个可用的ID,也就是零,这样,我们有了两个一样的ID。

同样地,p3得到了ID值1,接下来,把p2逐位复制给p4,p4的ID与p2相同。在执行p2 = p1逐位复制之后,p1与p2两个对象都有了相同的p1的ID。

程序第二次运行后,输出如下:

p1 = [0](0,0)
p2 = [2](3,7)
p3 = [3](9,1)
p4 = [2](3,7)
p2 = [0](0,0)

在此可看到,p1的ID值总为零。

显而易见,引用类与值类是各有千秋,不是在每种场合,都可以调换使用的。

基本类型映射

遵照标准C++的精神,对CLI值类型的基本类型映射,都已经全部在定义中实现了,就Microsoft Visual C++而言,映射关系如表1所示。

    
C++/CLI类型 CLI值类型
bool System::Boolean
wchar_t System::Char
signed char System::SByte
unsigned char System::Byte
char System::SByte或 System::Byte
short int System::Int16
unsigned short int System::UInt16
int System::Int32
unsigned int System::UInt32
long long int System::Int64
unsigned long long int System::UInt64
float System::Single
double System::Double
表1:C++/CLI与CLI值类的映射关系

另外,还有一种值类型:System::Decimal,但没有对应的C++/CLI类型。

请看以下表达式,它们都涉及到访问前述CLI值类型的静态或实例成员。

Int32::MaxValue
Double::Parse("123.45e-1")
10.2f.ToString()
(10 + 5.9).ToString()
(100).ToString()
100 .ToString()

因应Visual C++的映射,10.2f的类型为float,其映射为System::Single,并调用了其ToString函数;类似地,(10 + 5.9)类型为double,因此调用了System::Double的ToString。显然,从语义的角度来看,带有圆括号的100与其后带有一个空格的100,这种写法是多余的,但是,如果忽略它们,100与其后的句点将会解析为一个带有标识符的double常量,这会导致语法错误。

复数问题

例4,演示了一个有着实部与虚部的复数的值类型。

例4:

using namespace System;
public value class Complex
{
  double real;
  double imag;
  public:
   static initonly Complex i;
   static Complex()
   {
    i = Complex(0.0, 1.0);
   }
   Complex(double real)
   {
    this->real = real;
    this->imag = 0.0;
   }
   Complex(double real, double imag)
   {
    this->real = real;
    this->imag = imag;
   }
   property double Real
   {
    double get() { return real; }
    void set(double value) { real = value; }
   }
   pr

凌众科技专业提供服务器租用、服务器托管、企业邮局、虚拟主机等服务,公司网站:http://www.lingzhong.cn 为了给广大客户了解更多的技术信息,本技术文章收集来源于网络,凌众科技尊重文章作者的版权,如果有涉及你的版权有必要删除你的文章,请和我们联系。以上信息与文章正文是不可分割的一部分,如果您要转载本文章,请保留以上信息,谢谢!

分享到: 更多

Copyright ©1999-2011 厦门凌众科技有限公司 厦门优通互联科技开发有限公司 All rights reserved

地址(ADD):厦门软件园二期望海路63号701E(东南融通旁) 邮编(ZIP):361008

电话:0592-5908028 传真:0592-5908039 咨询信箱:web@lingzhong.cn 咨询OICQ:173723134

《中华人民共和国增值电信业务经营许可证》闽B2-20100024  ICP备案:闽ICP备05037997号