进入旧版 | 服务项目 | 成功案例 | 联系方式 | 过客留言 | 友情链接
   
设为首页
加入收藏
联系我们
网站首页 | 新闻资讯 | 操作系统 | 办公软件 | 网络软件 | 工具软件 | 媒体动画 | 网页制作 | 网站开发 | 程序开发 | 平面设计
Photoshop视频教程 | Word入门 | Flash入门 | JScript | VBScript | ASP | PHP | ADO | 网页特效 | 3DS MAX6.0命令 | 系统进程
您当前的位置:GOODSGY电脑学习网 -> 程序开发 -> VC -> 文章内容  
实例解析C++/CLI之值类型

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

  请注意,此处没有默认的构造函数。对一个值类来说,CLI本身把类实例中所有字段的位都设置为零,所以,不能提供自己的默认构造函数;然而,零、false、 nullptr对其他类型来说,也许并不是合适的默认值,因此,对某些特定类型来说,就要用引用类型来取代值类型了。(遵从C++/CLI的实现会将 false与nullptr表示为位全部为零。)

  值类的另一个限制是它们带有一个默认的拷贝构造函数和一个赋值操作符,两者都会进行逐位复制,并不可被重载。www.goodsgy.com

[1] [2] [3] [4] [5]  下一页

在百度中搜索:实例解析C++/CLI之值类型
在Google中搜索:实例解析C++/CLI之值类型
在Yahoo中搜索:实例解析C++/CLI之值类型

收藏到网摘:新浪VIVI 365key 我摘 POCO网摘 博采中心 YouNote 和讯网摘 天天收藏
[] [返回上一页] [打 印] [收 藏]

 相关文章    最新文章
· Photoshop多图合成实例:乡村女孩
· Excel中快速定位的技巧实例
· [组图] Flash实例:可爱的小青蛙闹钟
· ASP程序中输出Excel文件实例一则
· [组图] Photoshop调色实例:晚霞中的美丽新..
· [组图] Photoshop制作国难日哀悼海报实例
· [组图] Photoshop合成蝴蝶仙子实例教程
· [组图] Flash实例教程:卡通MM眨眼睛动画
· [组图] Photoshop商业广告实例:海的女儿
· [组图] Photoshop实例教程手绘封面古典美女..
 
· VC实现系统热键激活后台服务程序
· SEO:关于baidu一些排名规则的讨论
· More Effective C++:不要重载的操作符
· VC利用boost库解析正则表达式
· [图文] 用VC实现对超长数据库字段的操作
· More Effective C++:防止资源泄漏
· 用VC#2005解析含有多种格式的文本文件
· C++中禁止异常信息传递到析构函数外
· [图文] Visual C# 2005实现控件中捕获按键..
· C++中理解“传递参数”和异常之间的差异

∷相关文章评论∷    (评论内容只代表网友观点,与本站立场无关!) [更多评论…]
站内搜索

精彩图文
  网站导航  
操作系统 办公软件 网络软件
Vista Windows2003 WindowsXP Windows2000/NT Windows9X/ME Linux 其他 Word Excel Powerpoint Outlook 金山系列 其他 网页浏览 上传下载 联络聊天 邮件工具 服务器软件 网络辅助
工具软件 媒体动画 网页制作
系统工具 媒体工具 压缩工具 图文处理 文件管理 其他 3DMAX Authorware Director Maya 视频处理 其他 Flash Dreamweaver FireWorks FrontPage LiveMotion Golive HTML/CSS 其它
网站开发 平面设计 程序设计
ASP JSP PHP CGI JavaScript VBScript XML/SOAP Web服务器 Photoshop PhotoImpact CorelDraw Illustrator Freehand 设计欣赏 其他 VB VC .NET C/C++ DELPHI JAVA

冀ICP备05019428号
Copyright © 2004-2008 电脑学习网 Inc.All rights reserved.
TEL:13832340607
QQ:39873155
E_Mail:goodsgy(#)hotmail.com   (把(#)替换成@)
MSN:goodsgy(#)hotmail.com   (把(#)替换成@)