网站导航免费论文 原创论文 论文搜索 原创论文 网学软件 学术大家 资料中心 会员中心 问题解答 原创论文 论文素材 设计下载 最新论文 下载排行 论文上传 在线投稿 联系我们
返回网学首页
网学联系
最新论文 推荐专题 热门论文 素材专题
当前位置: 网学 > 编程文档 > C# > 正文
C++/CLI中类的本质分析
来源:Http://myeducs.cn 联系QQ:点击这里给我发消息 作者: 用户投稿 来源: 网络 发布时间: 12/10/14
下载{$ArticleTitle}原创论文样式

Visual C++ 2005(Visual C++ 8.0)中的C++支持C++/CLI,C++/CLI同时支持C++语言特性和.NET编程语言特性,可以实现.NET CLI不支持而C++支持的语言特性,例如多重继承等,还支持混合Assembly,可以在同一Assembly中混合使用CIL代码和本机代码。

C++/CLI的功能要比C#强的多,更适合作为分析.NET Framework内核的编程语言,笔者试编写了一个C++/CLI程序,试图通过反汇编编译生成的.NET Assembly可执行文件,分析C++/CLI中类的本质。

笔者编写的这个程序是一个试验性的复数和实数计算程序,下面是C++主程序(TypesSample1_CPP.cpp):

// TypesSample1_CPP.cpp: 主项目文件。

#include "stdafx.h"

using namespace System;

//Complex 类,.NET CTS值类型。

value class Complex

{

public:

       double Re;

       double Im;

       Complex(double Re,double Im);

};

Complex::Complex(double Re,double Im)

{

       this->Re=Re;

       this->Im=Im;

}

//ComplexMath 类型,.NET CTS引用类型。

ref class ComplexMath

{

public:

       Complex Add(Complex OpNum1,Complex OpNum2);

       Complex Minus(Complex OpNum1,Complex OpNum2);

};

Complex ComplexMath::Add(Complex OpNum1,Complex OpNum2)

{

       Complex Result1;

       Result1.Re=OpNum1.Re+OpNum2.Re;

       Result1.Im=OpNum1.Im+OpNum2.Im;

       return Result1;

}

Complex ComplexMath::Minus(Complex OpNum1,Complex OpNum2)

{

       Complex Result1;

       Result1.Re=OpNum1.Re-OpNum2.Re;

       Result1.Im=OpNum1.Im-OpNum2.Im;

       return Result1;

}

//DisplayComplex类,C++ 类。

class DisplayComplex

{

public:

       void Display(Complex C);

};

void DisplayComplex::Display(Complex C)

{

       String ^ReStr,^ImStr;

       ReStr=C.Re.ToString();

       ImStr=C.Im.ToString();

       Console::WriteLine(ReStr+"+"+ImStr+"i");

}

//RealMath类,C++ 类,编译成本机代码。

#pragma unmanaged

class RealMath

{

public:

       double Add(double OpNum1,double OpNum2);

       double Minus(double OpNum1,double OpNum2);

};

double RealMath::Add(double OpNum1,double OpNum2)

{

       return OpNum1+OpNum2;

}

double RealMath::Minus(double OpNum1,double OpNum2)

{

       return OpNum1-OpNum2;

}

#pragma managed

//主函数

int main(array<System::String ^> ^args)

{

       //C++/CLI中,.NET CTS值类型变量直接定义。

       Complex C1(2,2),C2(1,1);

       Complex C3,C4;

       //C++/CLI中,.NET CTS引用类型的对象通常使用

  • 下一篇资讯: 评C#事件处理
  • 网学推荐

    免费论文

    原创论文

    浏览:
    设为首页 | 加入收藏 | 论文首页 | 论文专题 | 设计下载 | 网学软件 | 论文模板 | 论文资源 | 程序设计 | 关于网学 | 站内搜索 | 网学留言 | 友情链接 | 资料中心
    版权所有 QQ:3710167 邮箱:3710167@qq.com 网学网 [Myeducs.cn] 您电脑的分辨率是 像素
    Copyright 2008-2015 myeducs.Cn www.myeducs.Cn All Rights Reserved
    湘ICP备09003080号