freepeople性欧美熟妇, 色戒完整版无删减158分钟hd, 无码精品国产vα在线观看DVD, 丰满少妇伦精品无码专区在线观看,艾栗栗与纹身男宾馆3p50分钟,国产AV片在线观看,黑人与美女高潮,18岁女RAPPERDISSSUBS,国产手机在机看影片

正文內(nèi)容

c要素類(lèi)和對(duì)象模版類(lèi)的繼承(編輯修改稿)

2024-11-17 16:16 本頁(yè)面
 

【文章內(nèi)容簡(jiǎn)介】 私有成員。 友元沒(méi)有 this指針,必要時(shí)可以用類(lèi)對(duì)象的引用作參數(shù)。 友元可以是一個(gè)類(lèi),這時(shí)友元類(lèi)中所有成員函數(shù)都是友元。 友元 不傳遞,不對(duì)稱(chēng),不繼承 。 友元沒(méi)有 this指針,比成員函數(shù)多一個(gè)參數(shù)。 istreamamp。 operator(istreamamp。 istr, Pointamp。 p) { istr。 return istr。 } ostreamamp。 operator(ostreamamp。 ostr, Pointamp。 p) { ostr“(”“,”“)”endl。 return ostr。 } 友元不是類(lèi)的成員,不用類(lèi)名域 Point::operator 函數(shù)在類(lèi)內(nèi)申明類(lèi)外定義 例 日期類(lèi) 保存于“ ”中 class date { int month, day, year。 //私有數(shù)據(jù) public: date(int, int, int)。 //有參構(gòu)造函數(shù) void next( )。 void print( )。 }today。 inline date::date(int a, int b, int c) { month=a。 day=b。 year=c。} void date:: print( ) { coutmonth“ /”day; cout“ /”yearendl。} void date::next( ) { switch month case 1: case3: case 5: case 7: case 8: case 10: { if(day31)day++。 else {month++。day=1。}}break。 case 4: case 6: case 9: case 11: { if(day30)day++。 else {month++。day=1。}}break。 case 12: { if(day31)day++。 else {year++。month=1。day=1。}}break。 case 2: case 2: if((year%4==0)amp。amp。year%400!=0) | |(year%400= =0)) { if(day29)day++。 else {month++。day=1。}} else{ if(day28)day++。 else {month++。day=1。}} } 例 date 類(lèi)測(cè)試程序 include “ ” include “ ” void main( ) { date today(2,13,2020)。//定義對(duì)象 date myBirthday(6,24,1983)。//定義對(duì)象 ( )。//對(duì)象調(diào)用操作 ( )。 ( )。 } 測(cè)試結(jié)果 2/14/2020 6/24/1983 三、模版( template) 通用數(shù)據(jù)類(lèi) 1. 模版函數(shù) 通用函數(shù) 2. 類(lèi)模版 通用數(shù)據(jù)類(lèi)型 模版函數(shù) 通用函數(shù) 幾個(gè)形式上完全相同的函數(shù),只有 參數(shù) 類(lèi)型和 返回值 類(lèi)型不同,可以 寫(xiě)成通用函數(shù),也叫 模版函數(shù) 。 例 . int max(int a, int b) {return ab?a:b; } float max(float a, float b) {return ab?a:b; } char max(char a, char b) {return ab?a:b; } 可以統(tǒng)一寫(xiě)成一個(gè) 模版函數(shù) template class T T max(T a, T b) {return ab?a:b; } 這里 T 是 類(lèi)型參數(shù) 可以用任意一個(gè)標(biāo)識(shí)符 模版函數(shù)的調(diào)用 對(duì)不同的參數(shù)都可以調(diào)用函數(shù) max int a, b。 char x,y。 a=3。 b=5。 x= 39。A39。 y=39。b39。 a=max(a, b)。 \\有意義 x=max(x, y)。 \\有意義 參數(shù)可以用 字符串 ,甚至復(fù)雜的 結(jié)構(gòu)變 量,對(duì)象 ,只要事先定義大小關(guān)系。 通用數(shù)據(jù)類(lèi)型 // 例 . 通用數(shù)組 抽象數(shù)組類(lèi)型 template class T class Array { T *alist。 //指針數(shù)據(jù) 表示一個(gè)數(shù)組 int size。 //表示數(shù)組長(zhǎng)度 public: Array(int s=50) //構(gòu)造函數(shù) Array(const ArrayTamp。X)。 //拷貝構(gòu)造函數(shù) ~Array( ){delete[ ] element。} //析構(gòu)函數(shù) ArrayTamp。operator=(const ArrayTamp。X)。// 賦值函數(shù)重載 Tamp。 operator[ ](int i); //一元運(yùn)算 [ ]重載 下標(biāo)函數(shù) operator T*( )const。 //強(qiáng)制類(lèi)型轉(zhuǎn)換 ,將當(dāng)前 //對(duì)象變成指向它的首地址的指針 , int ArraySize( )const。 //取數(shù)組長(zhǎng) void Resize(int sz)。 //數(shù)組長(zhǎng)重定義 friend ostreamamp。 operator(ostreamamp。, const ArrayTamp。)。 //輸出操作重載 }; template class T class Array { T *alist。 //指針數(shù)據(jù) 表示一個(gè)數(shù)組 int size。 //表示數(shù)組長(zhǎng)度 public: Array(int s=50) //構(gòu)造函數(shù) Array(const ArrayTamp。X)。 //拷貝構(gòu)造函數(shù) ~Array( ){delete[ ] element。} //析構(gòu)函數(shù) ArrayTamp。operator=(const ArrayTamp。X)。 // 賦值函數(shù)重載 Tamp。 operator[ ](int i); //一元運(yùn)算 [ ]重載 //下標(biāo)函數(shù) operator T*( )const。 //強(qiáng)制類(lèi)型轉(zhuǎn)換 ,將當(dāng)前 //對(duì)象變成指向它的首地址的指針 , int ArraySize( )const。 //取數(shù)組長(zhǎng) void Resize(int sz)。 //數(shù)組長(zhǎng)重定義 friend ostreamamp。 operator (ostreamamp。, const ArrayTamp。)。 //輸出操作重載 }; //構(gòu)造函數(shù) template class T ArrayT::Array(int sz) { size = sz。 alist = new T[size]。 if (alist == 0) {cout “內(nèi)存不夠”; return。 } } // 析構(gòu)函數(shù) destructor template class T ArrayT::~Array(void) { delete [ ] alist。 } // copy constructor 拷貝構(gòu)造函數(shù) template class T ArrayT::Array(const ArrayTamp。 X) { int n = 。 //取對(duì)象 X的長(zhǎng)度作為當(dāng)前對(duì)象的長(zhǎng) size = n。 alist = new T[n]。 // allocate dynamic array if (alist == 0) //作正確性檢查 {cout“內(nèi)存不夠”; return。} //copy array items from X to current object T* srcptr = 。 // address at start of T* destptr = alist。 // address at start of alist while (n) // copy list *destptr++ = *srcptr++。 } template class T //賦值函數(shù)重載 ArrayTamp。 ArrayT::operator= (const ArrayTamp。 X) { int n = 。 // 取 X的長(zhǎng)度 if (size != n) // 若長(zhǎng)度不同,重新分配內(nèi)存 {delete [ ] alist。 // destroy original memory alist = new T[n]。 // allocate a new array if (alist == 0) {cout“內(nèi)存不夠”; return。} size = n。 } // 將對(duì)象 X的元素逐個(gè)拷貝到當(dāng)前對(duì)象 // copy array items from X to current object T* destptr = alist。 T* srcptr =。 while (n) *destptr++ = *srcptr++。 // 返回當(dāng)前對(duì)象的值 //return reference to the current object return *this。 } //一元運(yùn)算 [ ]重載 下標(biāo)函數(shù) // overloaded index operator template class T Tamp。 ArrayT::operator[] (int n) { // do array bounds checking if (n 0 || n size1) {cout 下標(biāo)超界”; return。} // return the element from the private array list return alist[n]。 } //強(qiáng)制類(lèi)型轉(zhuǎn)換 ,將當(dāng)前對(duì)象 //變成指向它的首地址的指針, // pointer conversion operator template class T ArrayT::operator T* ( ) const { // return address of private array in the //current object return alist。 } //取當(dāng)前對(duì)象的長(zhǎng) template class T int ArrayT::ListSize( ) const { return size。 } //改變當(dāng)前對(duì)象的長(zhǎng)度 // resize operator template class T void ArrayT::Resize(int sz) { // test new size parameter。 terminate if size = 0 if (sz = 0) {cout “長(zhǎng)度不能小于等于 0”; return。} // n
點(diǎn)擊復(fù)制文檔內(nèi)容
教學(xué)課件相關(guān)推薦
文庫(kù)吧 www.dybbs8.com
備案圖片鄂ICP備17016276號(hào)-1