EDIT:
Quindi se capisco bene, devi ruotare di 180 gradi e basta. Quindi invertire le coordinate x, tenendo le y uguali e poi invertire le colonne. Ad esempio, se la matrice ha 4 righe e 4 colonne, la coordinata matt[3][3] deve diventare matt[0][0] nella nuova matrice (dove x e y sono matt[y][x] nel tuo caso mi pare).
Una matrice di rotazione generica e' definita: http://it.wikipedia.org/wiki/Rotazione_(matematica)
Quello che farei io per iniziare e' invertire tutte le coordinate x, tenendo le righe (y) uguali:
codice:
void ****::operator%(int r){
//definire nuova matrice, matt_new[righe][colonne]
if((r>=0)&&(r%2!=0)){
for(int y=0;y<righe;y++){
c=(colonne-1);
for(int x=0;x<colonne;x++){
matt_new[y][x]=matt[y][c];
c--;
}
}
}
}
Quello che devi fare dopo e' invertire le righe della matrice nuova, sempre effettuando una copia temporanea della stessa., quindi dovresti fare un altro ciclo for, solo per le righe, ovvero non cambiando i dati delle colonne.
Non capisco perche' nella tua funzione fai:
codice:
stato h=matt[i][j];
matt[i][j]=matt[k][g];
matt[k][g]=h;
In questo modo effettui una rotazione di 360 gradi, perche quando superi la meta' della matrice (in termine di colonne), rimetti i numeri iniziali nelle posizioni iniziali, mi pare.
Prova a fare come ho scritto io, istanziando una nuova matrice, e immettendo i dati dal quella originale.
Se non sono stato chiaro fammelo sapere! Spero di essere stato d'aiuto!