++



         

119. : ++ - 3


10.

1 #include <iostream.h>

2

3 class int_array

4 {

5 class row

6 {

7 friend class

int_array;

8 int *first_cell_in_row;

9

10 row( int *p ) : first_cell_in_row(p) {}

11 public:

12 int &operator[] ( int index );

13 };

14

15 int nrows;

16 int ncols;

17 int *the_array;

18

19 public:

20 virtual

21 ~int_array( void );

22 int_array( int rows, int

cols );

23

24 row operator[] (int index);

25 };

26 //========================================================

27 // - int_array

28 //========================================================

29 int_array::int_array( int rows, int cols )

30 : nrows ( rows )

31 , ncols ( cols )

32 , the_array ( new int[rows * cols])

33 {}

34 //--------------------------------------------------------

35 int_array::~int_array( void )

36 {

37 delete [] the_array;

38 }

39 //--------------------------------------------------------

40 inline int_array::row int_array::operator[]( int index )

41 {

42 return row( the_array + (ncols * index) );

43 }

44 //========================================================

45 // - int_array::row

46 //========================================================

47 inline int

&int_array::row::operator[]( int index )

48 {

49 return first_cell_in_row[ index ];

50 }

51

52 //========================================================

53 void main ( void ) // ..

54 {

55 int_array ar(10,20); //

, ar[10][20],

55 //

56 ar[1][2] = 100; // .

57 cout << ar[1][2];

59 }


8.