Tsipouro
Διάσημο μέλος
Ένα παράδειγμα κλάσης συμπληρωμένης με 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...
Σημείωση: Το μήνυμα αυτό γράφτηκε 15 χρόνια πριν. Ο συντάκτης του πιθανόν να έχει αλλάξει απόψεις έκτοτε.
fandago
Διακεκριμένο μέλος
this->xeria = ...;
this->mallia = ...;
this->podia = ...;
Αυτό ζητάς;
Σημείωση: Το μήνυμα αυτό γράφτηκε 15 χρόνια πριν. Ο συντάκτης του πιθανόν να έχει αλλάξει απόψεις έκτοτε.
Tsipouro
Διάσημο μέλος
Αν αυτό δεν ήταν δείκτης αλλά μεταβλητή, τότε θα μπορούσα να αρχικοποιήσω ως:
Antrwpos a1 //κλήση default constructor
και στη συνέχεια να περάσω τιμές στα πεδία του με τον parametrized constructor:
Antrwpos a1("κάτι", "κάτι", κάτι");
Τώρα, αυτό που θέλω, είναι κάτι αντίστοιχο για δείκτη σε αντικείμενο αυτής της κλάσσης, όπως ορίστηκε παραπάνω.
Νομίζω ότι σε αυτή την περίπτωση δεν γίνεται αρχικοποίηση με this, χωρίς να είμαι σίγουρος όμως, αφού έχω καιρό να ασχοληθώ με C++.
Σημείωση: Το μήνυμα αυτό γράφτηκε 15 χρόνια πριν. Ο συντάκτης του πιθανόν να έχει αλλάξει απόψεις έκτοτε.
fandago
Διακεκριμένο μέλος
Αν και έχω καιρό να ασχοληθώ με pointers (ζήτω η java ) αυτό που λες ΔΕΝ νομίζω να γίνεται.
Κάπου στη main του προγράμματος σου, δημιουργείς ένα αντικείμενο Anthrwpos το οποίο έχει private τις συγκεκριμένες string μεταβλητές (xeria, mallia, podia). Με τον απλό constructor ΔΕΝ μπορείς να τις αρχικοποιήσεις αυτές, παρά μόνο με τον constructor με τις παραμέτρους. Μιας και είναι private οι μεταβλητές, ούτε στο main πρόγραμμα μπορεις να τις πειράξεις αφού δεν τις βλέπει. Οπότε ο μόνος τρόπος να τις αρχικοποιήσεις είναι μέσω του constructor με τις παραμέτρους όπου μέσα σε αυτόν θα κάνεις this->και το στοιχείο που θέλεις να αρχικοποιήσεις.
Τώρα αν εσύ θέλεις pointers που θα έχουν τις θέσεις των στοιχείων και να τον έχεις στο main πρόγραμμα για να πειράζεις το περιεχόμενο τους, τότε καταργείς το νόημα του private και δεν ξέρω αν στο επιτρέπει και η ίδια η γλώσσα.
Σημείωση: Το μήνυμα αυτό γράφτηκε 15 χρόνια πριν. Ο συντάκτης του πιθανόν να έχει αλλάξει απόψεις έκτοτε.
Tsipouro
Διάσημο μέλος
Σύνταξη του default constructor:Κάπου στη main του προγράμματος σου, δημιουργείς ένα αντικείμενο Anthrwpos το οποίο έχει private τις συγκεκριμένες string μεταβλητές (xeria, mallia, podia). Με τον απλό constructor ΔΕΝ μπορείς να τις αρχικοποιήσεις αυτές, παρά μόνο με τον constructor με τις παραμέτρους. Μιας και είναι private οι μεταβλητές, ούτε στο main πρόγραμμα μπορεις να τις πειράξεις αφού δεν τις βλέπει. Οπότε ο μόνος τρόπος να τις αρχικοποιήσεις είναι μέσω του constructor με τις παραμέτρους όπου μέσα σε αυτόν θα κάνεις this->και το στοιχείο που θέλεις να αρχικοποιήσεις.
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
}
Τώρα αν δε γίνεται αυτό που χρειάζομαι θα πρεπεί να σκεφτώ άλλον τρόπο για να κάνω τη δουλειά μου. Ευχαριστώ πάντως.
Σημείωση: Το μήνυμα αυτό γράφτηκε 15 χρόνια πριν. Ο συντάκτης του πιθανόν να έχει αλλάξει απόψεις έκτοτε.
fandago
Διακεκριμένο μέλος
"Θέλω να αρχικοποιήσω τα πεδία ενός δείκτη πάνω σε ένα αντικείμενο της κλάσης αυτής μέσω των ήδη υπάρχοντων constructors."
Τα πεδία του αντικειμένου εννοείς έτσι; Αν ναι, τουλάχιστον στην java, όταν χρησιμοποιείς έναν constructor δημιουργείς ένα νέο αντικείμενο γιαυτό και μπορείς να τον καλέσεις μόνο με "new name_of_constructor();". Το να δημιουργήσεις ένα αντικείμενο με τον απλό constructor και έπειτα να καλέσεις τον constructor με τις παραμέτρους για να πειράξεις τα στοιχεία του αντικειμένου, ουσιαστικά φτιάχνει ένα νέο αντικείμενο με αυτήν την αρχικοποίηση. Εκτός αν στην C++ ισχύει κάτι άλλο. Άρα ο param constructor ΔΕΝ περνάει τα ορίσματα στο αντικείμενο, αλλά φτιάχνει ένα νέο. Λέω κάτι λάθος;
Αν μπορείς και αν δεν σε κουράζω, εξήγησε μου τι ακριβώς ζητάς να κάνεις, γιατί αυτό το "να αρχικοποιήσω τα πεδία ενός δείκτη πάνω σε ένα αντικείμενο" δε μου κάθεται καλά
Σημείωση: Το μήνυμα αυτό γράφτηκε 15 χρόνια πριν. Ο συντάκτης του πιθανόν να έχει αλλάξει απόψεις έκτοτε.
Tsipouro
Διάσημο μέλος
Σημείωση: Το μήνυμα αυτό γράφτηκε 15 χρόνια πριν. Ο συντάκτης του πιθανόν να έχει αλλάξει απόψεις έκτοτε.
Tsipouro
Διάσημο μέλος
Αυτό θέλει οπωσδήποτε, δε μπορώ να γίνω πιο συγκεκριμένος γιατί ούτε χρόνο έχω, ούτε ηρεμία, τα νεύρα μου είναι στο full και όταν αρχικοποιώ τον δείκτη το πιάνει σαν overload και βγάζει λάθος."να αρχικοποιήσω τα πεδία ενός δείκτη πάνω σε ένα αντικείμενο" δε μου κάθεται καλά
Σημείωση: Το μήνυμα αυτό γράφτηκε 15 χρόνια πριν. Ο συντάκτης του πιθανόν να έχει αλλάξει απόψεις έκτοτε.
fandago
Διακεκριμένο μέλος
Κοιτούσα τώρα λίγο C++ και απ' ότι είδα όταν κάνεις νέο αντικείμενο σου επιστρέφει δείκτη προς αυτό. Ο δείκτης όμως δεν έχει πεδία, το αντικείμενο έχει του οποίου τον δείκτη έχεις.
Θα με ενδιέφερε να ρίξω μια ματιά πάντως στα επίμαχα σημεία του κώδικα σου, μπας και έχω καταλάβει τελείως λάθος. Όοοοοοταν φυσικά έχεις χρόνο και ηρεμία
Σημείωση: Το μήνυμα αυτό γράφτηκε 15 χρόνια πριν. Ο συντάκτης του πιθανόν να έχει αλλάξει απόψεις έκτοτε.
Tsipouro
Διάσημο μέλος
Ή μάλλον θα το κάνω attach σε κάποιο post σε αυτό το θέμα.
Σημείωση: Το μήνυμα αυτό γράφτηκε 15 χρόνια πριν. Ο συντάκτης του πιθανόν να έχει αλλάξει απόψεις έκτοτε.
Tsipouro
Διάσημο μέλος
Σημείωση: Το μήνυμα αυτό γράφτηκε 15 χρόνια πριν. Ο συντάκτης του πιθανόν να έχει αλλάξει απόψεις έκτοτε.
fandago
Διακεκριμένο μέλος
Σημείωση: Το μήνυμα αυτό γράφτηκε 15 χρόνια πριν. Ο συντάκτης του πιθανόν να έχει αλλάξει απόψεις έκτοτε.
Tsipouro
Διάσημο μέλος
Σημείωση: Το μήνυμα αυτό γράφτηκε 15 χρόνια πριν. Ο συντάκτης του πιθανόν να έχει αλλάξει απόψεις έκτοτε.
Χρήστες Βρείτε παρόμοια
-
Φορτώνει...
-
Το forum μας χρησιμοποιεί cookies για να βελτιστοποιήσει την εμπειρία σας.
Συνεχίζοντας την περιήγησή σας, συναινείτε στη χρήση cookies στον περιηγητή σας.