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

<b>实例解析C++/CLI之开卷有益</b>[VC/C++编程]

赞助商链接



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

C++/CLI可以说是尺度C++语言一种新的"方言",它是Microsoft为充分操纵CLI(Common Language Infrastructure)平台而开辟出来的.那么,它在语言方面有何新颖独到之处呢,下面,就让我们一同开始奥妙的C++/CLI语言之旅(文中全部示例代码,均以Visual Studio.NET 2005 Professional编译通过,全部的讲授内容,也均以Visual Studio.NET 2005环境为底子).

程序集与元数据

传统的C++编译情势包含把单独的源文件编译为目标文件(obj),再把目标文件与库函数链接在一同,以生成可执路程序.而CLI情势却大不相同,它触及到程序集的成立与利用.

简单来说,在不计输入源文件数目的底子上,程序集即为单次编译的输出.假如输出带有一个进入点函数(比方main函数),它即为一个.exe文件;假如没有,它则为一个.dll文件.任何引用外部程序集而生成的编译,必必要拜候所依靠的程序集,此时也没有近似传统链接时用到的头文件机制,而是通过编译器在所依靠的程序集内部查找,来拜候所需的外部信息.

程序集包含了元数据,其描写了包含在那边的范例与函数,还有CIL(Common Intermediate Language)指令--Microsoft称其为"MSIL".元数据与指令能通过独立的VES(Virtual Execution System)来履行.

CLI范例

例1是一个模拟二维点的类.此处不得不提到命名空间,全部的CLI尺度库范例都属于System命名空间,或嵌套在其内部的某个命名空间之下,比方System::Object和System::String,还有System::IO、 System::Text、System::Runtime::CompilerOptions等等.标志1可避免在程序中一向利用namespace限定词.

例1:

/*1*/
using namespace System;
/*2*/
public ref class Point
{
  int x;
  int y;
  public:
   //定义用于读写X与Y实例属性
   /*3a*/ property int X
   {
    /*3b*/ int get() { return x; }
    /*3c*/ void set(int val) { x = val; }
   }
   /*4a*/ property int Y
   {
    /*4b*/ int get() { return y; }
    /*4c*/ void set(int val) { y = val; }
   }
   //定义实例构造函数
   /*5a*/ Point()
   {
    /*5b*/ X = 0;
    /*5c*/ Y = 0;
   }
   /*6a*/ Point(int xor, int yor)
   {
    /*6b*/ X = xor;
    /*6c*/ Y = yor;
   }
   //定义实例办法
   /*7a*/ void Move(int xor, int yor)
   {
    /*7b*/ X = xor;
    /*7c*/ Y = yor;
   }
   /*8a*/ virtual bool Equals(Object^ obj) override
   {
    /*8b*/ if (obj == nullptr)
    {
     return false;
    }
    /*8c*/ if (this == obj) //我们在测试自己吗?
    {
     return true;
    }
    /*8d*/ if (GetType() == obj->GetType())
    {
     /*8e*/ Point^ p = static_cast<Point^>(obj);
     /*8f*/ return (X == p->X) && (Y == p->Y);
    }
    return false;
   }
   /*9*/ virtual int GetHashCode() override
   {
    return X ^ (Y << 1);
   }
   /*10a*/ virtual String^ ToString() override
   {
    /*10b*/ return String::Concat("(", X, ",", Y, ")");
   }
};

在标志2中,我们定义了一个称为Point的引用类(ref class),一个引用类是一个CLI引用范例,当二者一同利用时,ref与class(中间有空格)表示了一个新的关键词.
  以上是“<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 .