構建一種新類型的第一步通常是把所需的元素組織成一種數據結構。下面是一個 struct的示例:
struct Vector {int sz; //元素的數量
double* elem; //指向元素的指針
}
這是Vector 的第一個版本,其中包含一個int 和一個 double*一個 Vector 類型的變量可以通過下述形式進行定義:
Vector v;
僅就v本身而言,它的用處似乎不大,因為v的 elem 指針并沒有指向任何實際的內容。為了讓它變得更有用,我們需要令v指向某些元素。例如,我們可以構造一個如下所示的Vector :
void vector_init(Vector& v, int s){v.elem =new double[s]; //分配一個數組,它包舍s個double值
v.sz = s;
}
也就是說,v的elem 成員被賦予了一個由 new 運算符生成的指針,而 sz 成員的值則是元素的個數。Vector& 中的符號 & 指定我們通過非常量引用的方式傳遞 v,這樣 vector_init() 就能修改傳入其中的向量了。
new運算符從一塊名為自由存儲 (free store)(又稱為動態內存(dynamic memory)或堆(heap)的區域中分配內存。
Vector 的一個簡單應用如下所示:
double read_and_sum(int s){//從cin 讀入s個整數,然后返回這些整數的和;其中,假定s 是正的
Vector v;
vector_init(v, s);
for (int i=0; i!=s; ++i)
cin >>v.elem[i];
double sum = 0;
for (int i = 0; i != s; ++i)
sum += v.elem[i];
return sum;
}
顯然,在靈活性和優雅程度上我們的 Vector 與標準庫 vector 還有很大差距,其是Vector 的使用者必須清楚地知道它的所有細節。
類對于用戶自定義類型來說,為了將其所有屬性捏合在一起,形成一個“真正的類型”,在表示形式和操作之間建立緊密的聯系還是很有必要的。特別是,我們常常希望自己構建的類型易于使用和修改,數據的使用具有一致性,并且表示形式最好對用戶是不可見的。此時,最理想的做法就是把類型的接口(所有代碼都可使用的部分) 與其實現(對其他不可訪問的數據具有訪問權限)分離開來。在 C++ 中,實現上述目的的語言機制被稱為類class)。類含有一系列成員 (member),可能是數據、函數或者類型。類的 public 成員定義該類的接口,private 成員則只能通過接口訪問。例如:
class Vector{public:
Vector(int s): elem{new double[s]}, sz{s}{} //構建一個Vector
double& operator[](int i){return elem[i];} //通過下標訪問元素
int size(){return sz;}
private:
double* elem; //指向元素的指針
int sz; //元素的數量
}
于是
Vector v(6);
總的來說,Vector 對象是一個“句柄”,它包含指向元素的指針 (elem)以及元素的數量(sz)。在不同 Vector 對象中元素的數量可能不同(本例是 6),即使同一個 Vector 對象在不同時刻也可能含有不同數量的元素 。不過,Vector 對象本身的大小永遠保持不變。這是 C++ 語言處理可變數量信息的一項基本技術:一個固定大小的句柄指向位于“別處”(即通過 new 分配的自由空間)的一組可變數量的數據。
枚舉c++提供的枚舉類型可通過關鍵字class來表明是強類型,例如:
enum class Color{red, blue, greeen};
enum class Traffic_light{green, yellow, red};
Color col = Color::red;
Traffic_light light = Traffic_light::red;
其中枚舉值(如red)位于其enum class 的作用域之內,因此我們可以在不同的enum class 中重復使用這些枚舉值而不致引起混淆。例如,Color::red 是指 Color 的 red,它與Traffic light::red 顯然不同。
枚舉類型常用于描述規模較小的整數值集合。通過使用有指代意義的 (且易于記憶的)枚舉值名字可提高代碼的可讀性,降低出錯的風險。
enum 后面的 class 指明了枚舉是強類型的,且它的枚舉值位于指定的作用域中。不同的 enum class 是不同的類型,這有助于防止對常量的意外誤用。在上面的例子中,我們不能混用 Traffic light和 Color 的值
你是否還在尋找穩定的海外服務器提供商?創新互聯www.cdcxhl.cn海外機房具備T級流量清洗系統配攻擊溯源,準確流量調度確保服務器高可用性,企業級服務器適合批量采購,新人活動首月15元起,快前往官網查看詳情吧
網頁題目:c++用戶自定義類型-創新互聯
文章源于:http://vcdvsql.cn/article46/ppchg.html
成都網站建設公司_創新互聯,為您提供外貿網站建設、網站營銷、企業建站、移動網站建設、App開發、網站制作
聲明:本網站發布的內容(圖片、視頻和文字)以用戶投稿、用戶轉載內容為主,如果涉及侵權請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網站立場,如需處理請聯系客服。電話:028-86922220;郵箱:631063699@qq.com。內容未經允許不得轉載,或轉載時需注明來源: 創新互聯