C++超集C++/CLI模塊的基本語法
托管對象的創(chuàng)建和引用
在前文中我們已經(jīng)演示過創(chuàng)建一個托管對象,對于如下C#代碼:
System.Object?x =?new?System.Object();
其在C++/CLI中的等價代碼如下:
System::Object^ x =?gcnew?System::Object();
和傳統(tǒng)的C++創(chuàng)建的語法比較下,
P* x =?new?P();
我們不難發(fā)現(xiàn),對于托管對象,主要引入了如下兩個語法:
用gcnew代替new實現(xiàn)托管對象的創(chuàng)建
用^代替*實現(xiàn)托管對象的指針
這種方式創(chuàng)建的對象是可以直接被CLR支持的,可以在C#中使用。托管對象指針使用的方式和傳統(tǒng)的對象指針還是比較類似的,直接使用->即可:
System::Object^ x = gcnew System::Object(); auto str = x->ToString();
另外,C++/CLI也有一種類似于C++的對托管對象的引用的語法:
System::Object^ x = gcnew System::Object(); System::Object% y = *x; auto str = y.ToString();
由于這種方式在C#里沒有對應(yīng)的語法,用起來感覺怪怪的,也不方便于其它.net語言集成。
托管類型的定義
我們也可以自定義托管類型,在CLR中,托管類型是分為引用類型(class)和值類型(struct)的,在C++/CLI中的分別定義方式如下:
引用類型:
public ref class MyClass { };
值類型:
public value class MyClass { };
在ISO C++中類定義中加上了ref或value標(biāo)記為托管類型,還算比較容易使用。
枚舉
枚舉的定義和C++11的enum class一樣,它像數(shù)字那樣可以同時應(yīng)用于托管類型和非托管類型。
public?enum?class?SomeColors?{?Red,?Yellow,?Blue?};
或者更精確的表示:
public enum class SomeColors : char { Red, Yellow, Blue };
數(shù)組
C++/CLI中新增了array<T> ^的方式定義數(shù)組。
array<int> ^a =?gcnew?array<int>(100) { 1, 2, 3 };
或者使用它的完整版:
cli::array<int> ^a =?gcnew?cli::array<int> {1, 2, 3};
不定參數(shù)
對于C#中的不定參數(shù)的語法:
void?foo(params?string[] args)
在C++/CLI中對應(yīng)的版本為:
void?foo(...?array<String^>^?args)
以上就是本文的全部內(nèi)容,希望對大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。
相關(guān)文章
C++常量詳解二(常量形參,常量返回值,常量成員函數(shù))
這篇文章主要介紹了C++常量詳解二(常量形參,常量返回值,常量成員函數(shù)),需要的朋友可以參考下2017-06-06VS?Code安裝及C、C++環(huán)境配置詳細教程(Windows系統(tǒng))
這篇文章主要介紹了VS?Code安裝及C、C++環(huán)境配置詳細教程(Windows系統(tǒng)),本文通過圖文并茂的形式給大家介紹的非常詳細,對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下2023-02-02基于Matlab實現(xiàn)離散系統(tǒng)分岔圖的繪制
這篇文章主要介紹了如何利用Matlab實現(xiàn)離散分岔圖的繪制,文中的示例代碼講解詳細,對我們學(xué)習(xí)Matlab有一定的幫助,需要的可以參考一下2022-04-04C語言初識動態(tài)內(nèi)存管理malloc calloc realloc free函數(shù)
動態(tài)內(nèi)存是相對靜態(tài)內(nèi)存而言的。所謂動態(tài)和靜態(tài)就是指內(nèi)存的分配方式。動態(tài)內(nèi)存是指在堆上分配的內(nèi)存,而靜態(tài)內(nèi)存是指在棧上分配的內(nèi)存2022-03-03