Я тут немного покумекал и вот к чему пришел
class Matrica
{
private:
int **d2array;
int sizeX;
int sizeY;
public:
Matrica(); //конструктор по умолчанию
friend ostream& operator<<(ostream&, const Matrica&);//перегрузка ввывода
friend istream& operator>>(istream&, Matrica&);//перегрузка ввода
int* operator [](const int);//Перегрузка оператора []
~Matrica();//Деструктор
};
//Перегрузка оператора []
int* Matrica::operator [](const int i)
{
return d2array[i];
}
void main()
{
Matrica a;
a[1][3]=4;
cout<<a[1][3];
cin>>a[0][2];
}
И все прекрасно работает
дело в том что если посмотреть на структуру динамического массива (см. картинку ниже) то получаеться что вертикальный столбец содержит указатели на начало горизонтальных вот и выходит что перегружаем сперва первые скобки находим нужный указатель потом сразу перегружаються вторые скобки и получаем указатель на требуемое значение и делаем с ним все что хотим.
И всеравно всем спасибо