×
Επεξεργασία Προφίλ Επεξεργασία Avatar Επεξεργασία Υπογραφής Επεξεργασία Επιλογών E-mail και Κωδικός Ρυθμίσεις Ειδοποιήσεων
×
Αποσύνδεση Οι Συνδρομές μου Το Προφίλ μου Τα Posts μου Τα Threads μου Λίστα Επαφών Αντιδράσεις σε Posts μου Παραθέσεις των Posts μου Αναφορές σε Εμένα Ενέργειες Συντονιστών Αόρατος Χρήστης
Τι;
Πως;
Ταξινόμηση
Που;
Σε συγκεκριμένη κατηγορία;
Ποιος;
Αποτελέσματα Αναζήτησης
Συμπληρώστε τουλάχιστον το πεδίο Τι;

Το e-steki είναι μια από τις μεγαλύτερες ελληνικές διαδικτυακές κοινότητες με 67,813 μέλη και 2,441,763 μηνύματα σε 76,735 θέματα. Αυτή τη στιγμή μαζί με εσάς απολαμβάνουν το e-steki άλλα 160 άτομα.

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

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

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

Tsipouro

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

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

O Tsipouro έγραψε: στις 14: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...
Πρέπει να συνδεθείτε για να αντιδράσετε σε μηνύματα
Παράθεση

fandago (Ә□⌂щяңš)

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

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

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

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

Tsipouro

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

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

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

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

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

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

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

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

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

fandago (Ә□⌂щяңš)

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

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

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

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

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

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

Tsipouro

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

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

O Tsipouro έγραψε: στις 15: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
}

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

fandago (Ә□⌂щяңš)

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

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

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

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

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

Tsipouro

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

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

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

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

Tsipouro

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

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

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

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

fandago (Ә□⌂щяңš)

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

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

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

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

Tsipouro

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

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

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

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

Ή μάλλον θα το κάνω attach σε κάποιο post σε αυτό το θέμα.
1
Πρέπει να συνδεθείτε για να αντιδράσετε σε μηνύματα
Παράθεση

Tsipouro

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

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

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

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

fandago (Ә□⌂щяңš)

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

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

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

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

Tsipouro

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

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

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

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


Χρήστες

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

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