Προς το περιεχόμενο

Απορία σε παράδειγμα API στοίβας - C++


pbp

Προτεινόμενες αναρτήσεις

Δημοσ.

Μπορείτε να μου εξηγήσετε τι συμβαίνει με τα παρακάτω στην αρχοικοποήση στοίβας ? :/

Έχω καταλάβει όλη την υλοποίηση της αλλά εδώ "σκάλωσα" :/

Ευχαριστώ.

 

Παράδειγμα API στοίβας

 

Όνομα Κλάσης: Stack

Δομή Δεδομένων: int

 

Αρχικοποίηση Στοιβας:

Stack mystack = new Stack();

// Κενή στοίβα προκαθορισμένου αρχικού μεγέθους (10)

Stack mystack = new Stack(int k);

// Κενή στοίβα αρχικού μεγέθους (k)

Stack mystack = new Stack(Stack &oldstack);

// Στοίβα αντίγραφο της oldstac

Δημοσ.

 

Λυπάμαι δεν το κατάλαβα και πάλι...

Είναι πιο πολύ θέμα σύνταξης.

Δηλαδή Έστω ότι γράφεις ένα απο αυτά τα 3 στη main για να δηλώσεις δυναμικά ένα αντικείμενο κλασης stack.

πως χρησιμοποιεί έτσι την new ?

H new δέχεται τύπο δεδομένων μετα το new και όχι συνάρτηση... :/

Δημοσ.

Λυπάμαι δεν το κατάλαβα και πάλι...

Είναι πιο πολύ θέμα σύνταξης.

Δηλαδή Έστω ότι γράφεις ένα απο αυτά τα 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 (δυναμηκη μνημη, ή οπος το ξερεις)

Δημοσ.

πχ

>
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 :)

Δημοσ.

>
Foo *obj;
obj = new Foo;

 

Αυτό εδώ δηλαδή δεν υφίσταται για δυναμική δέσμευση μνήμης αντικειμένου μιας κλάσης ??

(Δηλαδή εννοώ ο κλασικός τρόπος που θα το κάναμε για μια οποιαδήποτε μεταβλητή int)

Δημοσ.

Καλεις τον default constructor

 

αυτο Foo *f = new Foo; ισοδυναμει με το Foo *f = new Foo() οπος και int *i = new int; με int *i = int();

Δημοσ.

Συνεπώς το πιο σωστο είναι να καλώ ξεκάθαρα τον constructor που θέλω όταν έχω να κάνω με δυναμικά αντικείμενα ε ? :)

 

Αν καταλαβα καλα, εχει να κανει με POD, αρα εσενα δεν σε απασχολει εφοσον εχεις object

Αρχειοθετημένο

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

  • Δημιουργία νέου...