/ ************************************************* ***********************
*機能:1オブジェクトの初期化中に配列要素の数を指定することができる
* 2:遊びは、動的配列の要素を追加することができます
* 3:そのようなものの使用、動的メモリ割り当てについて心配しないで、剥離の問題が
4 *:アレイを使用することができる動的配列がクラスオブジェクトとして使用されるように、そのような要素は、インデックスによってアクセスすることができます。
************************************************** ************************************************************ /
の#include <iostreamの> する#include <CStringの> 使用して 名前空間STD; クラスCArray- { プライベート: int型のサイズ、 INT * PTR; 公共: CArray-(int型 S = 0 ); CArray-(のconstCARRAY&); 空一back(int型V)。 CARRAY&演算子 =(CONST CARRAY& )。 int型の長さ()。 INT&演算子 [](int型I) { 戻りPTR [I]。 } 〜CARRAY()。 }。 INT CARRAY ::長さ() { 戻りサイズ; } // CARRAY :: CARRAY(INT S = 0):サイズ(S) CARRAY :: CARRAY(int型秒):サイズ(S) { もし、(S == 0) PTR = NULL; 他の PTR = 新しい新しい INT [S]; } CARRAY-CArray- ::(CONST CARRAY-S&)// CONSTの注パラメータ、誤って変更防ぐ { IF(s.size == 0 ) { サイズ = 0を; PTR = NULL; 返す; } PTR = 新しい新しい INT [s.size]; のmemcpy(PTR、s.ptr、はsizeof(INT)* s.size); サイズ =s.size; } ボイド CARRAY ::一back(INT V) { 場合(PTR) { INT * tempPtr = 新しい INT [サイズ+ 1 ]。 memcpyを(tempPtr、PTR、サイズ * はsizeof(int型)); 削除[] PTRを。 PTR = tempPtr。 } 他 PTR = 新しい INT [ 1 ]。 PTR [サイズ ++] = V。 } CARRAY&CARRAY :: 演算子 =(CONSTS&CArray-)// NOTEパラメータのconst。 { IF(s.ptr == PTR) リターン * この; IF(PTR)//が削除NULLポインタを防ぐために注意を払う必要があります 削除[] PTRを、 IF (s.ptr) { PTRは = 新しい新しい INT [s.size]; memcpyを(PTR、s.ptr、s.size * はsizeof(INT )); サイズ = s.size; } そうでなければ { PTR = NULL; サイズ = 0 。 } 返す * これを。 } CARRAY ::〜CARRAY() { 場合(PTR) を削除[] PTR。 } int型のmain() { CARRAY。 以下のために(int型 i = 0 ; iは< 5 ; iは++ ) a.push_back(i)を、 // [0] = 11111。 // (I = 0 int型、iが(a.lengthを<); iが++)のため // COUT << [I] <<」「。 // coutの<< "AAAAの\ nを"; CARRAY A2、A3; A2 = ; 以下のための(int型 0I = ;私は(a.lengthを<); iは++ ) COUT << A2 [I] << " "を、 A2 =のA3を、 以下のために(int型私= 0 ; iがa2.lengthを()<; Iは++ ) COUT << A2 [I] << " " 。 coutの << てendl; [ 3 ] = 100 。 CARRAYのA4(A)。 以下のために(int型 i = 0 ; i)は(a4.lengthを<; iは++ ) { COUT << A4 [I] << " " 。 0; }