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