实例解析C++/CLI之值类型
p4 = {0}", p4); p2 = p1; Console::WriteLine("p2 = {0}", p2); } 第一次运行后,4个Point的输出如下: Point p1, p2(3,7), p3(9,1), p4 = p2;
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)
在此可看到,p1的ID值总为零。 显而易见,引用类与值类是各有千秋,不是在每种场合,都可以调换使用的。 基本类型映射 遵照标准C++的精神,对CLI值类型的基本类型映射,都已经全部在定义中实现了,就Microsoft Visual C++而言,映射关系如表1所示。
另外,还有一种值类型:System::Decimal,但没有对应的C++/CLI类型。 请看以下表达式,它们都涉及到访问前述CLI值类型的静态或实例成员。 Int32::MaxValue
因应Visual C++的映射,10.2f的类型为float,其映射为System::Single,并调用了其ToString函数;类似地,(10 + 5.9)类型为double,因此调用了System::Double的ToString。显然,从语义的角度来看,带有圆括号的100与其后带有一个空格的100,这种写法是多余的,但是,如果忽略它们,100与其后的句点将会解析为一个带有标识符的double常量,这会导致语法错误。 复数问题 例4,演示了一个有着实部与虚部的复数的值类型。 例4: using namespace System; |
||||||||||||||||||||||||||||
凌众科技专业提供服务器租用、服务器托管、企业邮局、虚拟主机等服务,公司网站:http://www.lingzhong.cn 为了给广大客户了解更多的技术信息,本技术文章收集来源于网络,凌众科技尊重文章作者的版权,如果有涉及你的版权有必要删除你的文章,请和我们联系。以上信息与文章正文是不可分割的一部分,如果您要转载本文章,请保留以上信息,谢谢! |