当前位置:天才代写 > tutorial > C语言/C++ 教程 > 实例理会C++/CLI之值范例

实例理会C++/CLI之值范例

2017-11-07 08:00 星期二 所属: C语言/C++ 教程 浏览:503

副标题#e#

值范例是一种轻量级的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 {/*...*

 

    关键字:

天才代写-代写联系方式