程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> C語言 >> C++ >> C++入門知識 >> 實例解析C++/CLI之值類型

實例解析C++/CLI之值類型

編輯: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 {/*...*
  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved