CLI類的分類與定義

2022-03-12 09:48:38 字數 3004 閱讀 4368

// cli類的分類與定義.cpp: 主專案檔案。

/*c++/cli中可以定義 兩種型別的struct和class型別,

一種為數值類(或數值結構):value class(value struct);

一種是引用類(或引用結構):ref class(ref value)。

與本地c++一樣,class與struct的區別在於前者的成員預設為私有,後者預設為公有。

下面僅以類來介紹,內容同樣適用於結構。

value class與ref class組成的是雙關鍵字,也就是說,單獨的value、ref並不是關鍵字。數值類與引用類的區別,以及它們與本地c++類的區別主要包括以下幾個方面:

1: 數值類的物件包含自己的資料,引用類的物件只能用控制代碼來訪問。

2: 在c++/cli中,函式成員不能宣告為const型別,取而代之的是字面值型別,修飾詞關鍵字為 literal。

3: 在非靜態函式成員中,this指標型別與本地c++不同:數值類的this指標為內部指標型別(interior_ptr),而引用類的this指標為控制代碼型別(t^)。

4: c++/cli類的資料成員不能包含本地c++陣列或本地c++類物件。

5: c++/cli類無友元函式。

6: c++/cli類的資料成員不能包含位型別的資料成員。(什麼是位資料型別)

7: c++/cli類的函式成員不能有預設的形參。

此外,在c++/cli中,不推薦類命名時使用字首『c』,其成員變數命名也不用字首』m_』。

*///一: 定義數值類

#include "stdafx.h"

#include using namespace system;

/*value class height

height(int ft, int ins):feet(ft), inches(ins){}

virtual string^ tostring() override

};*/

/*value class height

height(int ft, int ins):feet(ft), inches(ins)

virtual string^ tostring() override

};*/

/*value class height

//靜態建構函式沒有形參,且沒有初始化表,總是被宣告為provate,它不能被直接呼叫,而是由普通建構函式在呼叫之關自動呼叫

//這種方法與在定義靜態initonly變數時指定初始化值的唯一區別是,初始化值可以是執行時確定的

public:

//定認兩種型別的建構函式

initonly static int inchesperfoot;

height(int ins)

height(int ft, int ins):feet(ft), inches(ins)

virtual string^ tostring() override

};*/

//上面的例項失敗

/*int main(array^args)

", myheight);

console::writeline(l"your height is ", yourheight);

console::writeline(l"his height is ", hisheight);

double pi = 3.142;

//double型別被對映到system命名空間中的system::double類,該類實現了tostring方法,因此可以正確的輸出變數pi的數值3.142而非類名double

console::writeline(pi.tostring());

system("pause");

return 0;

}*//*

在上面的例子中,myheight和hisheight被分配在堆疊 上,yourheight被分配到了clr堆上。其中hisheight是yourheight的乙個副本,當向 hisheight賦值時,需要用*操作符對控制代碼yourheight進行解除引用計算。這是因為數值類物件總是包含自己的資料,因此它們不能引用同乙個物件,在賦值時總是採用複製的方式進行。注意:在c++/cli中,不能重寫預設建構函式。預設建構函式將所有的值型別資料成員初始化為0,將引用型別(控制代碼)初始化為nullptr。同樣,也不能過載複製建構函式和賦值操作符。預設的複製操作是將每乙個資料成員進行複製,物件間的賦值也是如此。

c++/cli中的類都有乙個成員函式tostring(),它返回乙個表示物件的字串 控制代碼。預設情況下,該字串為類名。這從上面的輸出可以看出:傳遞給writeline()函式的是height物件,結果輸出的並非物件所包含的高度 值,而是類名height,這是因為編譯器認為此處需要呼叫該物件的字串表示法,因此安排的tostring()函式呼叫,這個過程可以顯示的表達為

*///二 定義引用類

//引用類更加類似於本地c++類,它沒有數值類那麼多的限制,但是引用類沒有預設的複製建構函式和賦值運算子

//如果定義的類需要進行複製或賦值,必須顯式地新增相應的函式成員,下面的例子定義了乙個引用類及其使用方法

ref class box

box(double lv, double wl, double hl):length(lv), width(wl), height(hl)

double volume()

private:

double length;

double width;

double height;

};int main(array^args)

", abox->volume());

console::writeline(l"new box volume is ", newbox->volume());

system("pause");

return 0;

}//在上面的例子中,main()函式的第一句沒有建立任何物件,僅僅宣告了乙個控制代碼,並被預設的賦值成nullptr。此外,引用物件總是在堆上建立,因此總是用gcnew來呼叫其建構函式,並用控制代碼來跟蹤引用物件。

軟體測試的定義與分類

一 軟體的分類 二 什麼是軟體測試 三 軟體測試的目的 四 軟體測試的分類 五 環境分類 六 常見筆試面試題 程式 是按實現設計的功能和效能要求執行的指令序列。文件 是與開發 維護和使用有關的 材料。windows linux dos系統 ios系統 mysql等。書面定義 為了發現程式中的錯誤而執...

類擴充套件與分類

類擴充套件與分類 建立日期 2016.5.12 類擴充套件可以新增方法與屬性 下面為uiview的類擴充套件 inte ce uiview uiviewhierarchy property nullable,nonatomic,readonly uiview superview property n...

分類與聚類

1.分類是指有監督的學習,即要分類的樣本是有標記的,類別是已知的,事先定義好類別 類別數不變 2.按照某種標準給物件貼標籤 label 再根據標籤來區分歸類。3.分類的目的 是學會乙個分類函式或分類模型 也常常稱作分類器 該模型能把資料庫中的資料項對映到給定類別中的某乙個類中。4.分類器需要由人工標...