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

<b>实例解析C++/CLI之值范例</b>[VC/C++编程]

赞助商链接



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

值范例是一种轻量级的C++/CLI类机制,非常合适于小型的数据构造,且从语义的角度来看,与数值(Value)近似.

与之相比,引用范例的实例--包含那些声明在仓库上的,是由垃圾回收器管理的,而值范例的实例却不是.普通来说,一个值类较好的实现应只有一些数据成员,而不需求担当性,这样,在函数传送及返回值、或是赋值操作时,不会带来宏大的数据开销.

值类初印像

请看例1中的Point类,可以通过替换ref为value,来把一个引用类变成值类;与引用类(ref)类似,值类(value)也是一个包含了空格的关键字.与大家想像的一样,值类(value)与值构造(value struct)之间唯一的辨别就是,前者默许的可拜候性为private,此后者则为public.

例1:

using namespace System;
public value class Point
{
  int x;
  int y;
  public:
   //定义属性X与 Y的读写实例
   property int X
   {
    int get() { return x; }
    void set(int val) { x = val; }
   }
   property int Y
   {
    int get() { return y; }
    void set(int val) { y = val; }
   }
   //定义实例构造函数
 
   Point(int xor, int yor)
   {
    X = xor;
    Y = yor;
   }
   void Move(int xor, int yor)
   {
    X = xor;
    Y = yor;
  }
  virtual bool Equals(Object^ obj) override
  {
   if (obj == nullptr)
   {
    return false;
   }
   if (GetType() == obj->GetType())
   {
    Point^ p = static_cast<Point^>(obj);
    return (X == p->X) && (Y == p->Y);
   }
   return false;
  }
  static bool operator==(Point p1, Point p2)
  {
   return (p1.X == p2.X) && (p1.Y == p2.Y);
  }
  // static bool operator==(Point% p1, Point% p2)
  // {
  // return (p1.X == p2.X) && (p1.Y == p2.Y);
  // }
  // static bool operator==(Point& p1, Point& p2)
  // {
  // return (p1.X == p2.X) && (p1.Y == p2.Y);
  // }
  virtual int GetHashCode() override
  {
   return X ^ (Y << 1);
  }
  virtual String^ ToString() override
  {
   return String::Concat("(", X, ",", Y, ")");
  }
};

值类自动担当自System::ValueType,而System::ValueType则担当自System::Object,但是,这却不能显式地声明.值类隐式表明了为"sealed",也就是说,它不能被作为一个基类,别的,为其类成员指定一个protected是没有任何意义,并且也是不答应的.假如想显式声明一个值类(或引用类),可像以下所示:

value class X sealed {/*...*
  以上是“<b>实例解析C++/CLI之值范例</b>[VC/C++编程]”的内容,如果你对以上该文章内容感兴趣,你可以看看七道奇为您推荐以下文章:
  • <b>hosts是什么 hosts文件在什么位置 若何改正hosts</b>
  • <b>在 Windows 8 中手动安装语言包</b>
  • <b>五个常见 PHP数据库问题</b>
  • Windows中Alt键的12个高效快速的利用本领介绍
  • <b>MySQL ORDER BY 的实现解析</b>
  • <b>详解MySQL存储历程参数有三种范例(in、out、inout)</b>
  • <b>Win8系统恢复出来经典的开始菜单的办法</b>
  • <b>Win8系统花屏怎么办 Win8系统花屏的办理办法</b>
  • <b>Windows 7系统下无线网卡安装</b>
  • <b>为什么 Linux不需求碎片整理</b>
  • <b>Windows 8中删除账户的几种办法(图)</b>
  • <b>教你如安在win7下配置路由器</b>
  • 本文地址: 与您的QQ/BBS好友分享!
    • 好的评价 如果您觉得此文章好,就请您
        0%(0)
    • 差的评价 如果您觉得此文章差,就请您
        0%(0)

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

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