[C++/CLI编程宝典][4]第一个C++/CLI程序


一 本次通过一个简单的C++/CLI控制台程序,能使学习者有对C++/CLI程序有个个大概的印象,同时引出一些基本的概念和关键字。下面是程序代码:


#include 
< iostream >
#include 
< string >

//  1 ISOC++
public   class  NativeClass
{
public :
    NativeClass(std::
string  str)
    {
        m_str 
=  str;
        std::cout 
<<   " ISOC++ 本地类型构造! "   <<  std::endl;
    }
    
~ NativeClass()
    {
        std::cout 
<<   " ISOC++ 本地类型析构! "   <<  std::endl  <<  std::endl;
    }
    
void  Print()
    {
        std::cout 
<<  m_str  <<  std::endl;
    }
private :
    std::
string  m_str;
};

//  2 C++/CLI
value  struct  ValueStruct
{
    System::String
^  m_str;
    ValueStruct(System::String
^  str)
    {
        m_str 
=  str;
        System::Console::WriteLine(
" 托管value值类型构造! " );
    }
    
//  不能有析构函数
    
// ~ValueStruct()
    
// {
    
//     System::Console::WriteLine("托管value值类型析构!");
    
// }
     void  Print()
    {
        System::Console::WriteLine(m_str);
    }
};

//  3 C++/CLI
ref   class  RefClass
{
public :
    RefClass(System::String
^  str)
    {
        m_str 
=  str;
        System::Console::WriteLine();
        System::Console::WriteLine(
" 托管ref引用类型构造! " );
    }
    
~ RefClass()
    {
        System::Console::WriteLine(
" 托管ref引用类型析构! " );
        System::Console::WriteLine();
    }
    
void  Print()
    {
        StartPrint();
        System::Console::WriteLine(m_str);
        EndPrint();
    }

    
//  属性property,委托delegate和事件event
    property System::String ^  Str
    {
        System::String
^   get () {  return  m_str; }
        
void   set (System::String ^  str) { m_str  =  str; }
    }

    
delegate   void  PrintDelegate( void );
    
event  PrintDelegate ^  StartPrint;
    
event  PrintDelegate ^  EndPrint;

private :
    System::String
^  m_str;    
};

void  StartPrint()
{
    System::Console::WriteLine(
" Print开始事件,马上开始Print函数调用! " );
}
void  EndPrint()
{
    System::Console::WriteLine(
" Print结束事件,Print函数调用结束! " );
}

void  main()
{
    NativeClass
*  pNC  =   new  NativeClass( " 你好,我是ISOC++本地类型! " );
    pNC
-> Print();
    delete pNC;

    ValueStruct vs(
" 你好,我是托管value值类型! " );
    vs.Print();
    
    RefClass
^  hRC  =  gcnew RefClass( " 你好,我是托管ref引用类型! " );
    hRC
-> StartPrint  +=  gcnew RefClass::PrintDelegate(StartPrint);
    hRC
-> EndPrint  +=  gcnew RefClass::PrintDelegate(EndPrint);
    hRC
-> Print();
    hRC
-> Str  =   " 你好,我是托管ref引用类型!现在正通过property属性修改成员feild字段! " ;
    hRC
-> Print();
    delete hRC; 

}


二 下面逐步分析代码和简单解释一些新关键字和新名词:


1)类型NativeClass是ISOC++的类型,使用是使用new构造,使用完后然后delete。
2)类型ValueStruct为C++/CLI新的托管value值类型,直接使用,不需要new或gcnew,value值类型不能有析构函数,因此也不必delete,value值类型被分配在栈上。
3)类型RefClass为C++/CLI的新的托管ref引用类型,使用gcnew构造,用完后delete,也可以不delete,因为实际上Ref类型是的实例是分配在托管堆上的,内存由CLR的垃圾收集器来管理。
4)在RefClass我们可以看到C++/CLI中引入了新的关键字property属性,delegate委托和event事件。

三 上面的代码可以使用VS2008创建CLR的C++的console工程运行,新建工程的类型如下图:

2009010422091619.png

运行后如下图:

2009010422031084.png

完!

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值