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

2016-02-19 12:34 2 1 收藏

get新技能是需要付出行动的,即使看得再多也还是要动手试一试。今天图老师小编跟大家分享的是实例解析C++/CLI之值类型,一起来学习了解下吧!

【 tulaoshi.com - 编程语言 】


  值类型是一种轻量级的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_castPoint^(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 {/*...*

来源:https://www.tulaoshi.com/n/20160219/1601188.html

延伸阅读
仔细想想地位卑贱的类型转换功能(cast),其在程序设计中的地位就象goto语句一样令人鄙视。但是它还不是无法令人忍受,因为当在某些紧要的关头,类型转换还是必需的,这时它是一个必需品。 不过C风格的类型转换并不代表所有的类型转换功能。一来它们过于粗鲁,能答应你在任何类型之间进行转换。不过假如要进行更精确的类型转换,...
在实际计算中可能会出现浮点型的无效数据,格式化输出到文件中内容为1.79769e+308,输出到界面就是很大一串数据。这两种方式无论哪种在阅读和查找时就不是很方便。在开发中遇见浮点型数据无效值得判定。 无效值定义 如下: #define InvalidDouble *(double*)("\xff\xff\xff\xff\xff\xff\xef\x7f") double  price; .........(计算步骤省...
布尔类型对象可以被赋予文字值true或者false,所对应的关系就是真于假的概念! 我们通常使用的方法是利用他来判定条件的真于假,例如如下的代码: C++ 代码 //程序作者:管宁 //站点:www.cndev-lab.com //所有稿件均有版权,如要转载,请务必闻名出处和作者 #include iostream using ...
  假如一个变量你需要几种可能存在的值,那么就可以被定义成为枚举类型。之所以叫枚举就是说将变量或者叫对象可能存在的情况也可以说是可能的值一一例举出来。 !-- frame contents -- !-- /frame contents -- 举个例子来说明一吧,为了让大家更明白一点,比如一个铅笔盒中有一支笔,但在没有打开...
01.分析以下程序的执行结果 #includeiostream.h void main() { int a; int &b=a; // 变量引用 b=10; cout"a="aendl; } 解: 本题说明变量引用的方法。b是a的引用,它们分配相同的空间,b的值即为a的值。 所以输出为 a=10。 注重:引用是引入了变量或对明的一个 义词...

经验教程

300

收藏

42
微博分享 QQ分享 QQ空间 手机页面 收藏网站 回到头部