Η ερωτηση αφορα την 1η ασκηση της 3ης σειρας, συγκεκριμενα την μεθοδο operator =.
ChessBoardArray & operator = (const ChessBoardArray &a) {
/*delete [] array;
priv_size = a.priv_size; HOW DOES THIS EVEN DO SOMETHING???
priv_base = a.priv_base;
array = new int[priv_size*priv_size];
for (int i=0; i<priv_size*priv_size; i++)
array[i] = a.array[i];
return *this;
*/}
Το παραπανω ειναι η υλοποιηση του operator =
(τουλαχιστον ετσι νομιζω). Οπως φαινεται ειναι ολοκληρη η υλοποιηση μεσα σε comment. Παρολ΄ αυτα, στην main οριζω εναν πινακα a
, τον παρακατω:
0 0 0 0
0 0 0 0
3 0 0 0
0 0 0 5
Και χρησιμοποιω τον operator =
για να ορισω και εναν ακομα πινακα b
, αντιγραφο του a
, οπως φαινεται παρακατω:
cout << a; //operator << is used
cout << endl;
ChessBoardArray b = a;
b[1][1] = 39;
b[3][1] = 2;
cout << b;
cout << endl;
cout << a;
Αυτο παραδοξως λειτουργει και κανει το εξης:
0 0 0 0
0 0 0 0
3 0 0 0
0 0 0 5
0 0 0 0
0 39 0 0
3 0 0 0
0 2 0 5
0 0 0 0
0 0 0 0
3 0 0 0
0 0 0 5
Στο παραδειγμα οχι μονο αντιγραφεται ο πινακας a
, αλλα αλλαζω και καποια στοιχεια του b
για να αποκλεισω το ενδεχομενο να εχει γινει καποιο λαθος reference στον a
, πραγμα που προφανως δεν γινεται, αφου μετα ξανατυπωνω τον a
και δεν εχει αλλαξει.
Επειδη ρωτησα ηδη στο Stack Overflow, (https://stackoverflow.com/questions/66959350/operator-problem-why-is-this-happening#comment118359259_66959350)
και ζητηθηκε να κανω edit και να προσθεσω και τον construstor, το εκανα (ελπιζω να μην προκυψει προβλημα "παραθεσης κωδικα" :/).
Εχω αλλαξει τα ονοματα των μεθοδων/μεταβλητων στην ερωτηση στο Stack Overlow, απλα για να μην χρειαστει να παρεχω και παραπανω context και πληροφοριες για το περι τινους προκειται η ολη ερωτηση.
Επισης, το οπως θα δειτε και στον παραπανω συνδεσμο, ακριβως το ιδιο αποτελεσμα εχω οταν βαζω ολοκληρη την μεθοδο σε comment, το οποιο βγαζει ακομα λιγοτερο νοημα (???).
Ευχαριστω.