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...
Σημείωση: Το μήνυμα αυτό γράφτηκε 16 χρόνια πριν. Ο συντάκτης του πιθανόν να έχει αλλάξει απόψεις έκτοτε.
fandago
Διακεκριμένο μέλος


this->xeria = ...;
this->mallia = ...;
this->podia = ...;
Αυτό ζητάς;

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


Αν αυτό δεν ήταν δείκτης αλλά μεταβλητή, τότε θα μπορούσα να αρχικοποιήσω ως:
Antrwpos a1 //κλήση default constructor
και στη συνέχεια να περάσω τιμές στα πεδία του με τον parametrized constructor:
Antrwpos a1("κάτι", "κάτι", κάτι");
Τώρα, αυτό που θέλω, είναι κάτι αντίστοιχο για δείκτη σε αντικείμενο αυτής της κλάσσης, όπως ορίστηκε παραπάνω.
Νομίζω ότι σε αυτή την περίπτωση δεν γίνεται αρχικοποίηση με this, χωρίς να είμαι σίγουρος όμως, αφού έχω καιρό να ασχοληθώ με C++.
Σημείωση: Το μήνυμα αυτό γράφτηκε 16 χρόνια πριν. Ο συντάκτης του πιθανόν να έχει αλλάξει απόψεις έκτοτε.
fandago
Διακεκριμένο μέλος



Αν και έχω καιρό να ασχοληθώ με pointers (ζήτω η java

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

Σημείωση: Το μήνυμα αυτό γράφτηκε 16 χρόνια πριν. Ο συντάκτης του πιθανόν να έχει αλλάξει απόψεις έκτοτε.
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
}
Τώρα αν δε γίνεται αυτό που χρειάζομαι θα πρεπεί να σκεφτώ άλλον τρόπο για να κάνω τη δουλειά μου. Ευχαριστώ πάντως.
Σημείωση: Το μήνυμα αυτό γράφτηκε 16 χρόνια πριν. Ο συντάκτης του πιθανόν να έχει αλλάξει απόψεις έκτοτε.
fandago
Διακεκριμένο μέλος


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

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

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


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


Αυτό θέλει οπωσδήποτε, δε μπορώ να γίνω πιο συγκεκριμένος γιατί ούτε χρόνο έχω, ούτε ηρεμία, τα νεύρα μου είναι στο full και όταν αρχικοποιώ τον δείκτη το πιάνει σαν overload και βγάζει λάθος."να αρχικοποιήσω τα πεδία ενός δείκτη πάνω σε ένα αντικείμενο" δε μου κάθεται καλά![]()
Σημείωση: Το μήνυμα αυτό γράφτηκε 16 χρόνια πριν. Ο συντάκτης του πιθανόν να έχει αλλάξει απόψεις έκτοτε.
fandago
Διακεκριμένο μέλος



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

Θα με ενδιέφερε να ρίξω μια ματιά πάντως στα επίμαχα σημεία του κώδικα σου, μπας και έχω καταλάβει τελείως λάθος. Όοοοοοταν φυσικά έχεις χρόνο και ηρεμία

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


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


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



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


Σημείωση: Το μήνυμα αυτό γράφτηκε 16 χρόνια πριν. Ο συντάκτης του πιθανόν να έχει αλλάξει απόψεις έκτοτε.
Χρήστες Βρείτε παρόμοια
-
Φορτώνει...
-
Το forum μας χρησιμοποιεί cookies για να βελτιστοποιήσει την εμπειρία σας.
Συνεχίζοντας την περιήγησή σας, συναινείτε στη χρήση cookies στον περιηγητή σας.