C 可變長動態陣列類 的過載 返回引用

2021-10-09 22:38:46 字數 2515 閱讀 2728

//program 13.5.1.cpp  可變長動態陣列類

/*(1)陣列的元素個數可以在初始化該物件的時候指定。

(2)可以動態往陣列中新增元素。

(3)使用該類的時候不用操心動態記憶體分配、釋放問題

(4)能夠像使用陣列那樣來使用動態陣列類物件,如可以通過下標來訪問其元素。*/

#include

#include

using

namespace std;

/*//class carray可變長動態陣列類,陣列中儲存整形數*/

class

carray

//返回陣列元素個數

/*過載運算子:(是定義在類當中的做為成員函式的),可以直接訪問類的(私有)成員變數(指標變數ptr)*/

int&

operator

(int i)

/*返回引用型別,使之能夠作為左值.(作右值的話int和int & 都可以.)*/};

//class carray可變長動態陣列類.

/*析構函式

initial_constructor:申請s塊int型記憶體*/

carray::

carray

(int s)

:size

(s)//引數預設值在定義或者宣告出有一處說明即可,不要兩處都說明預設值.

//carray(int s){}

/*copy_constructor*/

carray::

carray

(carray & a)

ptr =

newint

[a.size]

;memcpy

( ptr, a.ptr,

sizeof

(int

)* a.size)

; size = a.size;

}//copy_constructor(carray &){}

/*destructor*/

carray::

~carray()

//~carray(){}

/*overload_operator_of_=*/

carray & carray::

operator=(

const carray & a)

/*如果a裡面的陣列是空的*/

if( a.ptr ==

null

) ptr =

null

; size =0;

return

*this;}

/*原有空間小於要求的大小,再做分配.*/

if( size < a.size)

/*然後分配新空間*/

ptr =

newint

[a.size];}

/*使"="左邊物件裡存放的陣列,大小和內容都和右邊的物件一樣*/

memcpy

( ptr,a.ptr,

sizeof

(int

)*a.size)

;/*用memcpy()代替strcpy()*/

size = a.size;

return

*this;}

/*在陣列尾部新增乙個元素*/

void carray::

push_back

(int v)

else

//陣列本來是空的

; ptr[size++

]= v;

//加入新的陣列元素;由於字元是乙個個追加到陣列尾部的,故size++即可;

}//在陣列尾部新增乙個元素

intmain()

carray a2,a3;

/*將a的內容深複製到a2中:*/

a2 = a;

/*列印複製的結果:*/

for(

int i =

0; i < a.

length()

;++i)

a2 = a3;

//a2又變成是空的

for(

int i =

0; i < a2.

length()

;++i)

返回0cout << endl;

/*單純列印換行.*/

a[3]

=100

;/*過載後的函式中,雖然return的表示式是ptr(為int*型別),但返回值型別被定義為引用型別int& 故也可以作為左值*/

carray a4

(a);

for(

int i =

0; i < a4.

length()

;++i)

return0;

}/*是雙目運算子6兩個運算元,乙個在裡面,乙個在外面。

表示式「a[i]」等價於「a.operator(i)」.

按照「」原有的特性,「a[i]」是應該能夠作為左值使用的,所以.

"operator」 這個函式應該返回引用型別.

*/

C 中的可變長陣列string

看乙個題目 編寫乙個程式,判斷乙個字串是否為 回文 順讀和倒讀都一樣的字串稱為 回文 include include using namespace std int main if s g else return 0 然而這個 並不能滿足要求,我們看到第10行的 這行 想按位倒序把字串s複製給字串g...

C 手把手教你實現可變長的陣列

假設我們要實現乙個會自動擴充套件的陣列,要實現什麼函式呢?先從下面的main函式給出的實現,看看有什麼函式是需要我們實現的。int main 輸出結果 0 1 2 3 4 0 1 2 100 4 要實現的方式,要做哪些事情呢?我先列一下 要實現乙個可變長陣列類的,基本需要實現下面的7個函式 clas...

C 二維陣列記憶體動態分配類以及函式過載

總時間限制 1000ms 記憶體限制 65536kb 在此處補充你的 描述 寫乙個二維陣列類 array2,使得下面程式的輸出結果是 0,1,2,3,4,5,6,7,8,9,10,11,next 0,1,2,3,4,5,6,7,8,9,10,11,程式 include include using n...