当前位置:七道奇文章资讯编程技术VC/C++编程
日期:2011-03-22 13:56:00  来源:本站整理

实例解析C++/CLI之静态构造函数[VC/C++编程]

赞助商链接



  本文“实例解析C++/CLI之静态构造函数[VC/C++编程]”是由七道奇为您精心收集,来源于网络转载,文章版权归文章作者所有,本站不对其观点以及内容做任何评价,请读者自行判断,以下是其具体内容:

就某些类而言,当在程序中第一次利用时,最好能有一个初始化历程;当程序不再需求时,也最好能做一些收尾工作,这些都是非常好的类计划习惯.

引出问题

假若有这样一种情形,某种范例的每个实例都必须有其唯一的ID,比方说某种交易范例,这些ID可用于在处理历程中追踪每笔交易,或之后用于审计员查看数据文件;为谈论便利,此处的ID为从0起始的有标记整型数.

假如把一个nextID值保存在内存中,并在每个新实例构造时,把它递增1,这无疑是一个不错的设法,但是,为使在程序持续的履行历程中保持ID值的唯一,就需求在每次程序完毕时保存此值,并在下次程序开始运行时恢复这个值,但在尺度C++中,是没办法来到达这个目的的,实际上,利用尺度CLI库也一样没办法完成.但是,在CLI的.NET实现中有几个扩大库,它们却可以完成这个任务.

问题重现

这回又用到了Point类,因为带有唯一ID的点很合适此主题.例1中的程序输出在代码之后:

例1:

using namespace System;
Point F(Point p) {
  return p;
}
int main()
{
  /*1*/ Point::TraceID = true;
  /*2*/ Point^ hp1 = gcnew Point;
  Console::WriteLine("hp1: {0}", hp1);
  /*3*/ hp1->Move(6,7);
  Console::WriteLine("hp1: {0}", hp1);
  /*4*/ Point^ hp2 = gcnew Point(3,4);
  Console::WriteLine("hp2: {0}", hp2);
  /*5*/ Point p1, p2(-1,-2);
  Console::WriteLine("p1: {0}, p2: {1}", %p1, %p2);
  /*6*/ p1 = F(p2);
  Console::WriteLine("p1: {0}", %p1);
}

输出:

hp1: [0](0,0)
hp1: [0](6,7)
hp2: [1](3,4)
p1: [2](0,0), p2: [3](-1,-2)
p1: [2](-1,-2)

在程序开始运行时,从一个文本文件中读取下一个可用的ID值,并用它来初始化一个Point类中的私有静态(private static)字段.最开始,这个文件包含的值为零.

基于大众静态布尔属性TraceID的值,Point中ToString函数生成的字符串可有挑选地包含Point的ID,并以 [id] 的情势作为一个前缀.假如此属性值为true,就包含ID前缀;不然,就不包含.默许情形下,这个属性值被设为false,因此,在标号1中我们把它设为true.

在标号2中,利用默许构造函数为Point分配了内存空间,并显示它的ID为0及值为(0,0).在标号3中,通过Move函数改正了Point的x与y坐标值,但这不会改正Point的ID,毕竟,它还是同一个实例--只不过用了差别的值.接着,在标号4中,利用了承受两个参数的构造函数为另一个Point分配了内存空间,并显示它的ID为1及值为(3,4).

在标号5中成立了两个基于仓库的实例,并显示出它们的ID及值.在第三个及第四个Point成立时,它们的ID辨别为2和3.

在标号6中,p1被赋于了一个新值,但是,p1还是它之前的同一个Point,所以它的ID没有改变.

第二次运路程序时,输出以下:

hp1: [6](0,0)
hp1: [6](6,7)
hp2: [7](3,4)
p1: [8](0,0), p2: [9](-1,-2)
p1: [8](-1,-2)

如上所示,4个新实例都被赋于了持续的ID值,且与第一次履行时截然差别,但是,还贫乏ID 4和5.请留神标号6及函数F的定义,Point参数是传值到此函数的,而一个Point也是通过值返回的.一样地,这二者城市调用到复制构造函数,而其则"忠厚"地成立了一个新实例,且每个新实例都有一个唯一的ID.因此,当p2通过值传送时,会成立一个ID为4的暂时Point,紧接着,当副本通过值返回时,又会成立一个ID为5的副本,而两个副本都是可丢弃的.当程序完毕时,写入到文件中下一个可用的ID为6,而在程序下次运行时,这就是第一个Point在分配空间时将用到的ID.


  以上是“实例解析C++/CLI之静态构造函数[VC/C++编程]”的内容,如果你对以上该文章内容感兴趣,你可以看看七道奇为您推荐以下文章:

  • Windows 7远程帮忙利用实例解析
  • Java程序最简单犯的21种错误实例解析
  • 基于J2EE的电子商务网站实例解析
  • 实例解析C++/CLI的串行化
  • 实例解析C++/CLI的"克隆"
  • 实例解析C++/CLI线程之多任务
  • 实例解析C++/CLI线程之线程状况长期性
  • <b>实例解析C++/CLI之开卷有益</b>
  • <b>实例解析C++/CLI之值范例</b>
  • <b>实例解析C++/CLI之代理与事件</b>
  • 实例解析C++/CLI之静态构造函数
  • 实例解析C++/CLI中的担当与列举
  • 本文地址: 与您的QQ/BBS好友分享!
    • 好的评价 如果您觉得此文章好,就请您
        0%(0)
    • 差的评价 如果您觉得此文章差,就请您
        0%(0)

    文章评论评论内容只代表网友观点,与本站立场无关!

       评论摘要(共 0 条,得分 0 分,平均 0 分) 查看完整评论
    Copyright © 2020-2022 www.xiamiku.com. All Rights Reserved .