【精华帖】托管C++/CLI编程:第1部分

目录

摘要

1、C++ / CLI

2、编写 C++ 代码

3、C++/ CLI “你好,世界!”项目

4、命名空间

5、类(引用类型)

6、方法

7、构造函数

8、值类型

9、属性

10、先决条件

总结


摘要

这篇文章解释了 .NET 公共语言运行时 (CLR) 上下文下 C++/CLI 编程背后的理论和原理。我们将研究 C++/CLI 编程的显着特性,例如它相对于原生 C++ 语言和 CLR 上下文的优势。我们将介绍使用 Visual Studio IDE 创建和执行 CLR 控制台和其他应用程序原型的基本机制。我们还将探讨 C++/CLI 语言的语义来编写和实现代码。本部分还详细介绍了 CLR C++ 编程原型的各个重要方面,这些方面与硬核面向对象编程相关。

1、C++ / CLI

科学 您可以使用 VC++ 开发两种根本不同的 C++ 应用程序。您可以编写在计算机上本机执行的应用程序。这些应用程序由 ISO/ANSI 语言标准定义,称为本机 C++ 程序。还可以编写应用程序,以便在 C++ 和 ECMA 定义的 355 标准的扩展版本(称为 CLR 程序或 C++/CLI 程序)的 CLR 控制下运行。

CLR 是用于执行用各种高级语言(包括 C#、VB 和 C++/CLI)编写的托管程序的环境。公共语言运行时 (CLR) 的规范现在体现在公共语言基础结构 (CLI) 的 ECMA 标准中。这就是为什么 CLR 的 C++ 被称为 C++/CLI 的原因。

CLI 本质上是虚拟机环境(虚拟执行系统 (VES))的规范,它使用其他高级语言编写的应用程序能够在不同的系统环境中执行,而无需重新编译源代码。CLI 为编译高级语言源代码的虚拟机指定标准中间语言(称为 MSIL)。当您执行程序时,MSIL 中的代码最终由 JIT 编译器映射到机器代码。因此,CLI 中间语言中的代码可以在具有 CLI 实现的任何其他环境中执行。

2、编写 C++ 代码

正如我们之前提到的,Windows 应用程序有两个选项;您可以编写使用 CLR 执行的代码,也可以编写直接编译为机器代码并因此本机执行的代码。使用 CLR 执行的 C++ 代码被描述为托管 C++,因为数据和代码由 CLR 管理,例如释放动态分配的用于存储数据的内存。这是自动处理的,从而消除了常见的本机 C++ 错误的来源。在 CLR 外部执行的 C++ 代码称为非托管 C++。

因此,与本机 C++ 相比,C++/CLI 具有巨大的优势,因为使用非托管 C++,您必须在程序执行期间自行处理分配和释放内存的所有方面,并且还需要保护应用程序免受各种安全渗透漏洞的影响。

06ed11fb02d35dd9f578b5f3d8505423.jpeg
C++/CLI 的最大优势是能够将本机代码与托管代码混合使用。您可以扩展现有的本机C++应用程序并添加 .NET 功能,还可以将 .NET 类添加到本机库,以便可以从其他 .NET 语言(如 C# 和 VB)使用它们C++。

3、C++/ CLI “你好,世界!”项目

本节介绍如何使用 Visual Studio IDE 以 C++/CLI 编程语言创建第一个“Hello World!”程序。尽管这是最简单的逻辑实现,但我们只是尝试通过 CLR 控制台基本应用程序(如另一个基于 C# 控制台的应用程序)显示字符串值。这是这方面的教程过程。

  1. 首先,确保在 Visual Studio IDE 中正确配置了 VC++ 插件。如果没有,请重新安装软件,并在此过程中选择 VC++ 选项。
     

    b5ccb231cd939ef66bd56afeeedfbd5b.jpeg

  2. 打开 Visual Studio IDE。转到“文件”菜单,选择“新建项目”,您将在对话框左窗格中找到 VC++ 语言插件。
     
  3. 展开 VC++ 并选择 CLR。然后,从右窗格中选择“CLR 控制台应用程序”。
     
  4. 最后,给项目起一个名字,如“CLI_test”,最后按下OK键,如上图所示。
     
  5. 现在,从“解决方案资源管理器”中打开CLI_test.cpp文件,并提供以下代码:
    1. #include "stdafx.h"  
    2.   
    3. using namespace System;  
    4.   
    5. int main(array<System::String ^> ^args)  
    6. {  
    7.     Console::WriteLine(L"Hello World");  
    8.     Console::ReadLine();  
    9.     return 0;  
    10.     }  
  6. 最后,生成项目并在控制台中查看输出。

通过构建控制台应用程序

d79dc76c2199b7794b906ade3f431dea.jpeg
创建文件 C++ / CLI 术语

本部分旨在通过概述基本的各种核心 C++/CLI 结构以及与面向对象编程相关的一些高级实现概念来启动 C++/CLI 编程,例如泛型、异常处理、委托和内存管理,在 CLR 领域使用 C++ 语法。

4、命名空间

.NET 类型组织在一个称为命名空间的特殊容器中。它可以体现任何类型,如类、接口、结构、属性、方法等......如果我们想引用其他程序集,我们需要在标头部分的 using 关键字之后指定 namespace 关键字。我们可以在 C++/CLI 中定义别名,但它们只能引用其他命名空间,而不能引用类。

  1. // import reference  
  2. using namespace System;  
  3. using namespace System::Text;  
  4.   
  5. //alais  
  6. using abc= System::Windows::Forms;  
  7.   
  8. // namespace definition  
  9. namespace test  
  10. {  
  11.     namespace ajay  
  12.     {  
  13.         namespace champu  
  14.              {  
  15.                     // code……  
  16.              }  
  17.     }     
  18. }  

最后,我们不能用一个 namespace 语句定义分层命名空间,而是必须嵌套命名空间。

5、类(引用类型)

类在 C++/CLI 中也称为引用类型。在 C++ 中,类和结构具有几乎相同的含义;您不需要像在 C# 中那样区分引用类型和值类型,其中类通常是引用类型,结构是值类型。在 C++ 中,ref 关键字用于定义托管类或结构。

  1. //class type  
  2. public ref class testClass  
  3. {  
  4. };  
  5.   
  6. //structure type  
  7. public ref struct testStruct  
  8. {  
  9. };  
结构和类都用大括号括起来,必须在类声明的末尾指定分号。

当面对引用类型变量时,必须在托管堆上分配其对象。在 C++/CLI 中,我们定义句柄运算符 ^ 以处理引用类型的声明。 gcnew 运算符在托管堆上分配内存。我们可以使用  new 关键字在本机堆上分配空间。
  1. //Instantiation  
  2. testClass^ obj=gcnew testClass();  
  3.   
  4. testSruct^ obj1= gcnew testStruct();  
  5.   
  6. obj1= nullptr;  

我们可以使用类似于 C# null 关键字的 nullptr 关键字从内存中取消引用或删除类型的相应空间。

6、方法

C++/CLI 中的方法声明与 C# 几乎相同,因为它们始终在类中定义。但有一个例外,即访问修饰符不是方法声明的一部分,而是写在方法声明之前。

  1. public ref class testClass  
  2. {  
  3.   
  4.    public:  
  5.    void hello()  
  6.    {  
  7.    }  
  8. };  
参数既可以作为值类型传递,也可以作为 C++/CLI 中的引用类型传递。在引用类型的情况下,我们使用与 C# ref 关键字和 C++ & 运算符几乎相同的 % 运算符。
  1. public:  
  2.       void display(int x)  
  3.     {  
  4.     }  
  5.         
  6.        void operation(int% i)  
  7.     {  
  8.     }  
  9. …………………  
  10. //Method calling  
  11.        testClass^ xyz;   
  12.        testClass^ obj=gcnew testClass();  
  13.        obj.operation(xyz);  

7、构造函数

C++/CLI 构造函数与类(如 C#)同名。但与方法声明一样,访问修饰符与构造函数分离。

  1. public ref class testClass  
  2. {  
  3.   
  4. public:  
  5.     testClass(String^ a)  
  6.     {  
  7.         this->a=a;  
  8.     }  
  9. private:  
  10.     String^ a;  
  11. };  

8、值类型

为了声明值类型,C++/CLI 在类或结构关键字之前使用 value 关键字。使用值类型,我们可以在堆栈中分配类型空间。

  1. public value class testClass  
  2. {  
  3. }  
下表提供了 .NET 和 C++ /

CLI 上下文下的预定义值类型列表:
 

6300a5bb18ae9f05d394daa8a37eecab.jpeg

枚举 枚举是使用 C++/CLI 语言中的 enum 关键字定义的。此实现与其他 .NET 语言(如 C#)几乎相同。
  1. public enum class color  
  2. {  
  3.       RED,GREEN,BLUE,BLACK  
  4. };  

9、属性

C++/CLI 语言使用 property 关键字声明属性,它需要具有 get 访问器的类型,并且必须使用 set 访问器定义变量值。

  1. public ref class testClass  
  2. {  
  3. private:  
  4.     String^ name;  
  5.   
  6. public:  
  7.     property String^ Name  
  8.     {  
  9.         String^ get()  
  10.         {  
  11.             return name;  
  12.         }  
  13.         void set()  
  14.         {  
  15.             name=value;  
  16.         }  
  17.     }  
  18. };  

10、先决条件

预计程序员必须精通本机 C++ 面向对象编程,并深入了解在 .NET CLR 上下文中构建和执行 C++ 和 C# 应用程序。

总结

本文描述了 C++/CLI 相对于原生 C++ 语言的重要性和优势。我们详细了解了 CLR 上下文下 C++/CLI 的核心剖析。在本文中,我们学习了如何定义各种核心概念的语法,如值类型、引用类型、方法和枚举。这些系列的下一篇文章将解释其余的概念,如接口、继承、多态、循环、数组等。

  • 14
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

吉特思米(gitusme)

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值