Το e-steki είναι μια από τις μεγαλύτερες ελληνικές διαδικτυακές κοινότητες με 66,089 εγγεγραμμένα μέλη και 2,388,000 μηνύματα σε 74,643 θέματα. Αυτή τη στιγμή μαζί με εσάς απολαμβάνουν το e-steki άλλα

Καλώς ήρθατε στο e-steki!

Εγγραφή Βοήθεια

Αρχικοποίηση δεικτών πάνω σε αντικείμενα κάποιας κλάσεις (C++).

Tsipouro

Περιβόητο Μέλος

Το avatar του χρήστη Tsipouro
Ο Tsipouro αυτή τη στιγμή δεν είναι συνδεδεμένος Είναι 29 ετών , επαγγέλεται Κτηνίατρος και μας γράφει απο Σουηδία (Ευρώπη). Έχει γράψει 917 μηνύματα.

O Tsipouro έγραψε στις 13:32, 18-11-08:

#1
Λοιπόν, έστω ότι έχω μια κλάση, η οποία έχει δηλωμένα σαν private τα χαρακτηριστικά ενός αντικειμένου και σαν public έναν απλό constructor, έναν constructor για πέρασμα παραμέτρων και έναν constructor που αντιγράφει (deep copy) τα πεδία του αντικειμένου object σε ένα άλλο αντικείμενο της ίδιας κλάσης, όπως και κάποιες άλλες συναρτήσεις που δε μας (σας) ενδιαφέρουν. Θέλω να αρχικοποιήσω τα πεδία ενός δείκτη πάνω σε ένα αντικείμενο της κλάσης αυτής μέσω των ήδη υπάρχοντων constructors. Επειδή έχω καιρό να ασχοληθώ με C++ και τώρα μου χρειάζεται για ένα project και επειδή ο καταπληκτικός καθηγητής που μας μάθαινε C++ πέρυσι δεν είχε αναφέρει κάτι τέτοιο στο μάθημα, για να αναγκάστω τώρα εγώ να βγάλω μόνος μου το φίδι απ' την τρύπα, όποιος μπορεί ας μου δώσει ένα παράδειγμα πάνω σε αυτό που με προβληματίζει.

Ένα παράδειγμα κλάσης συμπληρωμένης με constructors και destructor:

class Antrwpos { private: char *xeria; char *podia; char *mallia; public: Anthrwpos(); //default Anthrwpos(char *xeria, char *podia, char *mallia); //param Antrwpos(const Anthrwpos &a); //copy ~Antrwpos(); //destructor void dummy() { cout << "O Tsipouros einai axrhstos kai den kserei C++" << endl; } }; //An thelete na grapsw kai ta swmata twn constructors grapste to sta replies...

Σημείωση: Το μήνυμα αυτό γράφτηκε πάνω από 9 χρόνια πριν. Ο συντάκτης του πιθανόν να έχει αλλάξει απόψεις έκτοτε.

0 Δεν μπορείτε να αξιολογήσετε αρνητικά το μήνυμα αυτόΔεν μπορείτε να αξιολογήσετε θετικά το μήνυμα αυτό
Παράθεση

fandago (Ә□⌂щяңš)

Επιφανές Μέλος

Το avatar του χρήστη fandago
Ο Ә□⌂щяңš αυτή τη στιγμή δεν είναι συνδεδεμένος Είναι 34 ετών και μας γράφει απο Αθήνα (Αττική). Έχει γράψει 2,620 μηνύματα.

O fandago μπορεί να φαίνεται αλλά ΔΕΝ έγραψε στις 14:03, 18-11-08:

#2
Αν κατάλαβα καλά, αυτό που θέλεις είναι το αντίστοιχο του this της java που στην C++ νομίζω ότι θα το χρησιμοποιήσεις στον constructor με τις παραμέτρους ως:
this->xeria = ...;
this->mallia = ...;
this->podia = ...;
Αυτό ζητάς;

Σημείωση: Το μήνυμα αυτό γράφτηκε πάνω από 9 χρόνια πριν. Ο συντάκτης του πιθανόν να έχει αλλάξει απόψεις έκτοτε.

0 Δεν μπορείτε να αξιολογήσετε αρνητικά το μήνυμα αυτόΔεν μπορείτε να αξιολογήσετε θετικά το μήνυμα αυτό
Παράθεση

Tsipouro

Περιβόητο Μέλος

Το avatar του χρήστη Tsipouro
Ο Tsipouro αυτή τη στιγμή δεν είναι συνδεδεμένος Είναι 29 ετών , επαγγέλεται Κτηνίατρος και μας γράφει απο Σουηδία (Ευρώπη). Έχει γράψει 917 μηνύματα.

O Tsipouro έγραψε στις 14:09, 18-11-08:

#3
Αυτό που (πίστευω ότι) χρειάζεται στο κομμάτι του project που γράφω είναι ένας δείκτης σε αντικείμενο της κλάσης π.χ. Antrwpos *a1.

Αν αυτό δεν ήταν δείκτης αλλά μεταβλητή, τότε θα μπορούσα να αρχικοποιήσω ως:
Antrwpos a1 //κλήση default constructor

και στη συνέχεια να περάσω τιμές στα πεδία του με τον parametrized constructor:

Antrwpos a1("κάτι", "κάτι", κάτι");

Τώρα, αυτό που θέλω, είναι κάτι αντίστοιχο για δείκτη σε αντικείμενο αυτής της κλάσσης, όπως ορίστηκε παραπάνω.

Νομίζω ότι σε αυτή την περίπτωση δεν γίνεται αρχικοποίηση με this, χωρίς να είμαι σίγουρος όμως, αφού έχω καιρό να ασχοληθώ με C++.

Σημείωση: Το μήνυμα αυτό γράφτηκε πάνω από 9 χρόνια πριν. Ο συντάκτης του πιθανόν να έχει αλλάξει απόψεις έκτοτε.

0 Δεν μπορείτε να αξιολογήσετε αρνητικά το μήνυμα αυτόΔεν μπορείτε να αξιολογήσετε θετικά το μήνυμα αυτό
Παράθεση

fandago (Ә□⌂щяңš)

Επιφανές Μέλος

Το avatar του χρήστη fandago
Ο Ә□⌂щяңš αυτή τη στιγμή δεν είναι συνδεδεμένος Είναι 34 ετών και μας γράφει απο Αθήνα (Αττική). Έχει γράψει 2,620 μηνύματα.

O fandago μπορεί να φαίνεται αλλά ΔΕΝ έγραψε στις 14:20, 18-11-08:

#4
Ομολογώ ότι με μπέρδεψες.
Αν και έχω καιρό να ασχοληθώ με pointers (ζήτω η java ) αυτό που λες ΔΕΝ νομίζω να γίνεται.

Κάπου στη main του προγράμματος σου, δημιουργείς ένα αντικείμενο Anthrwpos το οποίο έχει private τις συγκεκριμένες string μεταβλητές (xeria, mallia, podia). Με τον απλό constructor ΔΕΝ μπορείς να τις αρχικοποιήσεις αυτές, παρά μόνο με τον constructor με τις παραμέτρους. Μιας και είναι private οι μεταβλητές, ούτε στο main πρόγραμμα μπορεις να τις πειράξεις αφού δεν τις βλέπει. Οπότε ο μόνος τρόπος να τις αρχικοποιήσεις είναι μέσω του constructor με τις παραμέτρους όπου μέσα σε αυτόν θα κάνεις this->και το στοιχείο που θέλεις να αρχικοποιήσεις.

Τώρα αν εσύ θέλεις pointers που θα έχουν τις θέσεις των στοιχείων και να τον έχεις στο main πρόγραμμα για να πειράζεις το περιεχόμενο τους, τότε καταργείς το νόημα του private και δεν ξέρω αν στο επιτρέπει και η ίδια η γλώσσα.

Σημείωση: Το μήνυμα αυτό γράφτηκε πάνω από 9 χρόνια πριν. Ο συντάκτης του πιθανόν να έχει αλλάξει απόψεις έκτοτε.

0 Δεν μπορείτε να αξιολογήσετε αρνητικά το μήνυμα αυτόΔεν μπορείτε να αξιολογήσετε θετικά το μήνυμα αυτό
Παράθεση

Tsipouro

Περιβόητο Μέλος

Το avatar του χρήστη Tsipouro
Ο Tsipouro αυτή τη στιγμή δεν είναι συνδεδεμένος Είναι 29 ετών , επαγγέλεται Κτηνίατρος και μας γράφει απο Σουηδία (Ευρώπη). Έχει γράψει 917 μηνύματα.

O Tsipouro έγραψε στις 14:29, 18-11-08:

#5
Αρχική Δημοσίευση από fandago
Κάπου στη main του προγράμματος σου, δημιουργείς ένα αντικείμενο Anthrwpos το οποίο έχει private τις συγκεκριμένες string μεταβλητές (xeria, mallia, podia). Με τον απλό constructor ΔΕΝ μπορείς να τις αρχικοποιήσεις αυτές, παρά μόνο με τον constructor με τις παραμέτρους. Μιας και είναι private οι μεταβλητές, ούτε στο main πρόγραμμα μπορεις να τις πειράξεις αφού δεν τις βλέπει. Οπότε ο μόνος τρόπος να τις αρχικοποιήσεις είναι μέσω του constructor με τις παραμέτρους όπου μέσα σε αυτόν θα κάνεις this->και το στοιχείο που θέλεις να αρχικοποιήσεις.
Σύνταξη του default constructor:

Anthrwpos::Anthrwpos()
{
xeria=NULL;
podia=NULL;
mallia=NULL;
}
ε, αυτό είναι η αρχικοποίηση.
Ο parametrized constructor περνά ορίσματα στα πεδία της κλάσης.

Anthrwpos::Anthrwpos(char *hands, char *feet, char *hair)
{
xeria = new char [strlen(hands) +1];
podia = new char [strlen(feet) + 1];
mallia = new char [strlen(hair) + 1];
strcpy(xeria, hands);
//τα υπόλοιπα strcpy
}

Τώρα αν δε γίνεται αυτό που χρειάζομαι θα πρεπεί να σκεφτώ άλλον τρόπο για να κάνω τη δουλειά μου. Ευχαριστώ πάντως.

Σημείωση: Το μήνυμα αυτό γράφτηκε πάνω από 9 χρόνια πριν. Ο συντάκτης του πιθανόν να έχει αλλάξει απόψεις έκτοτε.

0 Δεν μπορείτε να αξιολογήσετε αρνητικά το μήνυμα αυτόΔεν μπορείτε να αξιολογήσετε θετικά το μήνυμα αυτό
Παράθεση

fandago (Ә□⌂щяңš)

Επιφανές Μέλος

Το avatar του χρήστη fandago
Ο Ә□⌂щяңš αυτή τη στιγμή δεν είναι συνδεδεμένος Είναι 34 ετών και μας γράφει απο Αθήνα (Αττική). Έχει γράψει 2,620 μηνύματα.

O fandago μπορεί να φαίνεται αλλά ΔΕΝ έγραψε στις 14:45, 18-11-08:

#6
Συγχώραμε που δεν καταλαβαίνω, αλλά:
"Θέλω να αρχικοποιήσω τα πεδία ενός δείκτη πάνω σε ένα αντικείμενο της κλάσης αυτής μέσω των ήδη υπάρχοντων constructors."
Τα πεδία του αντικειμένου εννοείς έτσι; Αν ναι, τουλάχιστον στην java, όταν χρησιμοποιείς έναν constructor δημιουργείς ένα νέο αντικείμενο γιαυτό και μπορείς να τον καλέσεις μόνο με "new name_of_constructor();". Το να δημιουργήσεις ένα αντικείμενο με τον απλό constructor και έπειτα να καλέσεις τον constructor με τις παραμέτρους για να πειράξεις τα στοιχεία του αντικειμένου, ουσιαστικά φτιάχνει ένα νέο αντικείμενο με αυτήν την αρχικοποίηση. Εκτός αν στην C++ ισχύει κάτι άλλο. Άρα ο param constructor ΔΕΝ περνάει τα ορίσματα στο αντικείμενο, αλλά φτιάχνει ένα νέο. Λέω κάτι λάθος;

Αν μπορείς και αν δεν σε κουράζω, εξήγησε μου τι ακριβώς ζητάς να κάνεις, γιατί αυτό το "να αρχικοποιήσω τα πεδία ενός δείκτη πάνω σε ένα αντικείμενο" δε μου κάθεται καλά

Σημείωση: Το μήνυμα αυτό γράφτηκε πάνω από 9 χρόνια πριν. Ο συντάκτης του πιθανόν να έχει αλλάξει απόψεις έκτοτε.

0 Δεν μπορείτε να αξιολογήσετε αρνητικά το μήνυμα αυτόΔεν μπορείτε να αξιολογήσετε θετικά το μήνυμα αυτό
Παράθεση

Tsipouro

Περιβόητο Μέλος

Το avatar του χρήστη Tsipouro
Ο Tsipouro αυτή τη στιγμή δεν είναι συνδεδεμένος Είναι 29 ετών , επαγγέλεται Κτηνίατρος και μας γράφει απο Σουηδία (Ευρώπη). Έχει γράψει 917 μηνύματα.

O Tsipouro έγραψε στις 14:48, 18-11-08:

#7
Μισό να δοκιμάσω κάτι και σε ένα τέταρτο το πολύ θα σου πω. Αλλά ίσως οι ήδη υπάρχοντες constructors να δουλεύουν και για αρχικοποίηση δείκτη και όχι μόνο για μεταβλητές.

Σημείωση: Το μήνυμα αυτό γράφτηκε πάνω από 9 χρόνια πριν. Ο συντάκτης του πιθανόν να έχει αλλάξει απόψεις έκτοτε.

0 Δεν μπορείτε να αξιολογήσετε αρνητικά το μήνυμα αυτόΔεν μπορείτε να αξιολογήσετε θετικά το μήνυμα αυτό
Παράθεση

Tsipouro

Περιβόητο Μέλος

Το avatar του χρήστη Tsipouro
Ο Tsipouro αυτή τη στιγμή δεν είναι συνδεδεμένος Είναι 29 ετών , επαγγέλεται Κτηνίατρος και μας γράφει απο Σουηδία (Ευρώπη). Έχει γράψει 917 μηνύματα.

O Tsipouro έγραψε στις 15:27, 18-11-08:

#8
"να αρχικοποιήσω τα πεδία ενός δείκτη πάνω σε ένα αντικείμενο" δε μου κάθεται καλά
Αυτό θέλει οπωσδήποτε, δε μπορώ να γίνω πιο συγκεκριμένος γιατί ούτε χρόνο έχω, ούτε ηρεμία, τα νεύρα μου είναι στο full και όταν αρχικοποιώ τον δείκτη το πιάνει σαν overload και βγάζει λάθος.

Σημείωση: Το μήνυμα αυτό γράφτηκε πάνω από 9 χρόνια πριν. Ο συντάκτης του πιθανόν να έχει αλλάξει απόψεις έκτοτε.

0 Δεν μπορείτε να αξιολογήσετε αρνητικά το μήνυμα αυτόΔεν μπορείτε να αξιολογήσετε θετικά το μήνυμα αυτό
Παράθεση

fandago (Ә□⌂щяңš)

Επιφανές Μέλος

Το avatar του χρήστη fandago
Ο Ә□⌂щяңš αυτή τη στιγμή δεν είναι συνδεδεμένος Είναι 34 ετών και μας γράφει απο Αθήνα (Αττική). Έχει γράψει 2,620 μηνύματα.

O fandago μπορεί να φαίνεται αλλά ΔΕΝ έγραψε στις 15:48, 18-11-08:

#9
Ok, ηρέμησε όμως γιατί αλλιώς δεν θα βρεις τη λύση
Κοιτούσα τώρα λίγο C++ και απ' ότι είδα όταν κάνεις νέο αντικείμενο σου επιστρέφει δείκτη προς αυτό. Ο δείκτης όμως δεν έχει πεδία, το αντικείμενο έχει του οποίου τον δείκτη έχεις.
Θα με ενδιέφερε να ρίξω μια ματιά πάντως στα επίμαχα σημεία του κώδικα σου, μπας και έχω καταλάβει τελείως λάθος. Όοοοοοταν φυσικά έχεις χρόνο και ηρεμία

Σημείωση: Το μήνυμα αυτό γράφτηκε πάνω από 9 χρόνια πριν. Ο συντάκτης του πιθανόν να έχει αλλάξει απόψεις έκτοτε.

0 Δεν μπορείτε να αξιολογήσετε αρνητικά το μήνυμα αυτόΔεν μπορείτε να αξιολογήσετε θετικά το μήνυμα αυτό
Παράθεση

Tsipouro

Περιβόητο Μέλος

Το avatar του χρήστη Tsipouro
Ο Tsipouro αυτή τη στιγμή δεν είναι συνδεδεμένος Είναι 29 ετών , επαγγέλεται Κτηνίατρος και μας γράφει απο Σουηδία (Ευρώπη). Έχει γράψει 917 μηνύματα.

O Tsipouro έγραψε στις 16:00, 18-11-08:

#10
Θα αντιγράψω το μέρος του κώδικα που με ενδιαφέρει και θα σου στείλω στο mail σου αμα είναι. Ή σήμερα το απόγευμα ή αύριο.

Ή μάλλον θα το κάνω attach σε κάποιο post σε αυτό το θέμα.

Σημείωση: Το μήνυμα αυτό γράφτηκε πάνω από 9 χρόνια πριν. Ο συντάκτης του πιθανόν να έχει αλλάξει απόψεις έκτοτε.

1 Δεν μπορείτε να αξιολογήσετε αρνητικά το μήνυμα αυτόΔεν μπορείτε να αξιολογήσετε θετικά το μήνυμα αυτό
Παράθεση

Tsipouro

Περιβόητο Μέλος

Το avatar του χρήστη Tsipouro
Ο Tsipouro αυτή τη στιγμή δεν είναι συνδεδεμένος Είναι 29 ετών , επαγγέλεται Κτηνίατρος και μας γράφει απο Σουηδία (Ευρώπη). Έχει γράψει 917 μηνύματα.

O Tsipouro έγραψε στις 21:11, 18-11-08:

#11
Βρήκα πως γίνεται τελικά. Κάντε Lock το topic αν θέλετε. Fandago σε ευχαριστώ φίλε που προσφέρθηκες να βοηθήσεις.

Σημείωση: Το μήνυμα αυτό γράφτηκε πάνω από 9 χρόνια πριν. Ο συντάκτης του πιθανόν να έχει αλλάξει απόψεις έκτοτε.

0 Δεν μπορείτε να αξιολογήσετε αρνητικά το μήνυμα αυτόΔεν μπορείτε να αξιολογήσετε θετικά το μήνυμα αυτό
Παράθεση

fandago (Ә□⌂щяңš)

Επιφανές Μέλος

Το avatar του χρήστη fandago
Ο Ә□⌂щяңš αυτή τη στιγμή δεν είναι συνδεδεμένος Είναι 34 ετών και μας γράφει απο Αθήνα (Αττική). Έχει γράψει 2,620 μηνύματα.

O fandago μπορεί να φαίνεται αλλά ΔΕΝ έγραψε στις 21:51, 18-11-08:

#12
Τώρα λοιπόν που ηρέμησες, για εξήγησε μας τι ακριβώς ήθελες και πως το πέτυχες, να μαθαίνουμε και εμείς

Σημείωση: Το μήνυμα αυτό γράφτηκε πάνω από 9 χρόνια πριν. Ο συντάκτης του πιθανόν να έχει αλλάξει απόψεις έκτοτε.

0 Δεν μπορείτε να αξιολογήσετε αρνητικά το μήνυμα αυτόΔεν μπορείτε να αξιολογήσετε θετικά το μήνυμα αυτό
Παράθεση

Tsipouro

Περιβόητο Μέλος

Το avatar του χρήστη Tsipouro
Ο Tsipouro αυτή τη στιγμή δεν είναι συνδεδεμένος Είναι 29 ετών , επαγγέλεται Κτηνίατρος και μας γράφει απο Σουηδία (Ευρώπη). Έχει γράψει 917 μηνύματα.

O Tsipouro έγραψε στις 23:28, 18-11-08:

#13
Τίποτα το ιδιαίτερο, πρώτα απ' όλα αρχικοποιούσα ο λακαμάς τον δείκτη 2 φορές χρησιμοποιώντας πάνω του και τον default και τον parametrized constructor (γι' αυτό έβγαζε το σφάλμα σχετικά με overlaod). Τελικά για την αρχικοποίηση αρκούσε η κλήση του constructor που ήθελα όπως ακριβώς και για την αρχικοποίηση μιας μεταβλητής.

Σημείωση: Το μήνυμα αυτό γράφτηκε πάνω από 9 χρόνια πριν. Ο συντάκτης του πιθανόν να έχει αλλάξει απόψεις έκτοτε.

0 Δεν μπορείτε να αξιολογήσετε αρνητικά το μήνυμα αυτόΔεν μπορείτε να αξιολογήσετε θετικά το μήνυμα αυτό
Παράθεση
Απάντηση στο θέμα

Χρήστες

  • Τα παρακάτω 0 μέλη και 1 επισκέπτες διαβάζουν μαζί με εσάς αυτό το θέμα.
     
  • (View-All Tα παρακάτω 0 μέλη διάβασαν αυτό το θέμα τις τελευταίες 30 μέρες:
    Μέχρι και αυτή την στιγμή δεν έχει δει το θέμα κάποιο ορατό μέλος

Βρείτε παρόμοια

Μοιραστείτε το

...με ένα φίλο

...με πολλούς φίλους