pbp Δημοσ. 26 Ιουνίου 2011 Δημοσ. 26 Ιουνίου 2011 Μπορείτε να μου εξηγήσετε τι συμβαίνει με τα παρακάτω στην αρχοικοποήση στοίβας ? :/ Έχω καταλάβει όλη την υλοποίηση της αλλά εδώ "σκάλωσα" :/ Ευχαριστώ. Παράδειγμα API στοίβας Όνομα Κλάσης: Stack Δομή Δεδομένων: int Αρχικοποίηση Στοιβας: Stack mystack = new Stack(); // Κενή στοίβα προκαθορισμένου αρχικού μεγέθους (10) Stack mystack = new Stack(int k); // Κενή στοίβα αρχικού μεγέθους (k) Stack mystack = new Stack(Stack &oldstack); // Στοίβα αντίγραφο της oldstac
pbp Δημοσ. 26 Ιουνίου 2011 Μέλος Δημοσ. 26 Ιουνίου 2011 http://en.wikipedia.org/wiki/Function_overloading Λυπάμαι δεν το κατάλαβα και πάλι... Είναι πιο πολύ θέμα σύνταξης. Δηλαδή Έστω ότι γράφεις ένα απο αυτά τα 3 στη main για να δηλώσεις δυναμικά ένα αντικείμενο κλασης stack. πως χρησιμοποιεί έτσι την new ? H new δέχεται τύπο δεδομένων μετα το new και όχι συνάρτηση... :/
παπι Δημοσ. 26 Ιουνίου 2011 Δημοσ. 26 Ιουνίου 2011 Λυπάμαι δεν το κατάλαβα και πάλι... Είναι πιο πολύ θέμα σύνταξης. Δηλαδή Έστω ότι γράφεις ένα απο αυτά τα 3 στη main για να δηλώσεις δυναμικά ένα αντικείμενο κλασης stack. πως χρησιμοποιεί έτσι την new ? H new δέχεται τύπο δεδομένων μετα το new και όχι συνάρτηση... :/ πχ > class Foo { public: Foo(){} Foo(int i){} ~Foo(){} }; > Foo *f = new Foo(); Η λειτουργια της ειναι καπος ετσι > sizeof Foo > allocate memory (για το Foo) > call Foo::Foo() (constructor Foo(void) ) >Foo *f = new Foo(10); > sizeof Foo > allocate memory > call Foo::Foo(int i) >delete f; >call Foo::~Foo() >free allocated space edit Το allocation γινεται για τα members της class. Στο παραπανω δεν δεσμευεις τιποτα (θεωριτικα δεσμευεις ενα byte, πρακτικα περισσοτερα) αλλα αν η class ειχε καποια member πχ class Foo{int a;int b;}; τοτε αυτα θα τα εβαζε στην heap (δυναμηκη μνημη, ή οπος το ξερεις)
pbp Δημοσ. 26 Ιουνίου 2011 Μέλος Δημοσ. 26 Ιουνίου 2011 πχ > class Foo { public: Foo(){} Foo(int i){} ~Foo(){} }; > Foo *f = new Foo(); Η λειτουργια της ειναι καπος ετσι > sizeof Foo > allocate memory (για το Foo) > call Foo::Foo() (constructor Foo(void) ) >Foo *f = new Foo(10); > sizeof Foo > allocate memory > call Foo::Foo(int i) >delete f; >call Foo::~Foo() >free allocated space edit Το allocation γινεται για τα members της class. Στο παραπανω δεν δεσμευεις τιποτα (θεωριτικα δεσμευεις ενα byte, πρακτικα περισσοτερα) αλλα αν η class ειχε καποια member πχ class Foo{int a;int b;}; τοτε αυτα θα τα εβαζε στην heap (δυναμηκη μνημη, ή οπος το ξερεις) Οκ μπηκα στο νόημα! thnx
pbp Δημοσ. 26 Ιουνίου 2011 Μέλος Δημοσ. 26 Ιουνίου 2011 > Foo *obj; obj = new Foo; Αυτό εδώ δηλαδή δεν υφίσταται για δυναμική δέσμευση μνήμης αντικειμένου μιας κλάσης ?? (Δηλαδή εννοώ ο κλασικός τρόπος που θα το κάναμε για μια οποιαδήποτε μεταβλητή int)
παπι Δημοσ. 26 Ιουνίου 2011 Δημοσ. 26 Ιουνίου 2011 Καλεις τον default constructor αυτο Foo *f = new Foo; ισοδυναμει με το Foo *f = new Foo() οπος και int *i = new int; με int *i = int();
parsifal Δημοσ. 26 Ιουνίου 2011 Δημοσ. 26 Ιουνίου 2011 Καλεις τον default constructor αυτο Foo *f = new Foo; ισοδυναμει με το Foo *f = new Foo() οπος και int *i = new int; με int *i = int(); Δεν ισοδυναμούν πάντα: Do the parentheses after the type name make a difference with new?
pbp Δημοσ. 26 Ιουνίου 2011 Μέλος Δημοσ. 26 Ιουνίου 2011 Δεν ισοδυναμούν πάντα: Do the parentheses after the type name make a difference with new? Συνεπώς το πιο σωστο είναι να καλώ ξεκάθαρα τον constructor που θέλω όταν έχω να κάνω με δυναμικά αντικείμενα ε ?
παπι Δημοσ. 26 Ιουνίου 2011 Δημοσ. 26 Ιουνίου 2011 Συνεπώς το πιο σωστο είναι να καλώ ξεκάθαρα τον constructor που θέλω όταν έχω να κάνω με δυναμικά αντικείμενα ε ? Αν καταλαβα καλα, εχει να κανει με POD, αρα εσενα δεν σε απασχολει εφοσον εχεις object
pbp Δημοσ. 26 Ιουνίου 2011 Μέλος Δημοσ. 26 Ιουνίου 2011 Παιδιά σας ευχαριστώ πολύ για την πολύτιμη βοήθεια σας
Προτεινόμενες αναρτήσεις
Αρχειοθετημένο
Αυτό το θέμα έχει αρχειοθετηθεί και είναι κλειστό για περαιτέρω απαντήσεις.