d-l-sama Δημοσ. 15 Φεβρουαρίου 2009 Δημοσ. 15 Φεβρουαρίου 2009 Καλημέρα.Έχω κάνει μια κλάση και ο constructor παίρνει ένα όρισμα.Όμως δεν μπορώ να ξέρω πόσα αντικείμενα να δημιουργήσω.Αυτό καθορίζεται από ένα αρχείο που θα διαβάζει.Αλλά δεν είναι σταθερό το αρχείο.Και κάθε αντικείμενο θα έχει διαφορετική τιμή για το όρισμα.Με ποιον τρόπο μπορώ να δημιουργώ όσα αντικείμενα θέλω?Και να δίνω ότι τιμή μου δίνεται από το αρχείο σαν όρισμα?Εγώ προσπάθησα να το κάνω σαν struct που θα περιέχει εκεί μέσα το καινούριο αντικείμενο.Αλλά δεν μπορώ να περάσω το όρισμα.Μπορεί να βοηθήσει κάποιος? Εδώ είναι ένα τμήμα του προγράμματος. class test{ public: test(int size); }; struct node{ test* head=new test; };
Επισκέπτης Δημοσ. 15 Φεβρουαρίου 2009 Δημοσ. 15 Φεβρουαρίου 2009 αυτό που ψάχνεις είναι το πρότυπο σχεδιασμού singleton... http://en.wikipedia.org/wiki/Singleton_pattern googlare για το πως μπορείς να εφαρμόσεις singleton στον κώδικά στου..
georgemarios Δημοσ. 15 Φεβρουαρίου 2009 Δημοσ. 15 Φεβρουαρίου 2009 αυτό που ψάχνεις είναι το πρότυπο σχεδιασμού singleton...http://en.wikipedia.org/wiki/Singleton_pattern googlare για το πως μπορείς να εφαρμόσεις singleton στον κώδικά στου.. μαλλον δε διαβασες καλα τι ζηταει, με τη καμια δε κολλαει το singleton σε αυτο το προβλημα @d-l-sama αν καταλαβα το προβλημα σου καλα, μπορεις να φτιαξεις ενα δυναμικο array απο pointers της κλασσης σου. Αν υποθεσουμε πως στο αρχειο που λες, καθε γραμμη ειναι και μια τιμη για αρχικοποιηση ενος αντικειμενου (αυτο που περνα ως ορισμα στον constructor) τοτε ο αριθμος των γραμμων του αρχειου θα ειναι και το μεγεθος αυτου του array (αρα πρωτα μετρας τις γραμμες του αρχειου και μετα δημιουργεις το array). Mετα διαβαζεις μια-μια τις γραμμες του αρχειου. Για καθε γραμμη παιρνεις την τιμη και αρχικοποιεις το αντιστοιχο αντικειμενο. Αυτο σαν απλο hint και αυτο αν καταλαβα καλα το προβλημα σου. Αν εχεις απορια ή το προβλημα ειναι διαφορετικο, πες μας να το δουμε σε κωδικα.
d-l-sama Δημοσ. 15 Φεβρουαρίου 2009 Μέλος Δημοσ. 15 Φεβρουαρίου 2009 Πειράζει που δεν κατάλαβα τι κάνει?
georgemarios Δημοσ. 15 Φεβρουαρίου 2009 Δημοσ. 15 Φεβρουαρίου 2009 Πειράζει που δεν κατάλαβα τι κάνει? ποιο απ ολα;
d-l-sama Δημοσ. 15 Φεβρουαρίου 2009 Μέλος Δημοσ. 15 Φεβρουαρίου 2009 Καλό σαν ιδέα αλλά δεν γίνεται.Το αρχείο δεν θα περιέχει μόνο αυτήν την εντολή.Θα περιέχει και άλλες.Για την συγκεκριμένη εντολή που με ενδιαφέρει τώρα εμένα θα έχει 2 τιμές.Η πρώτη που θα είναι ένα id και λογικά δεν μας ενδιαφέρει γιατί θα μπαίνει σε ένα στατικό πίνακα και η δεύτερη που θα είναι το size που θα μπαίνει και στον constructor.Το πρόβλημα είναι πρόβλημα δομών δεδομένων.Έχω κάνει το hashing που μου ζητάνε αλλά κόλλησα στην main.Θα παίρνω από το αρχείο εντολή σαν HASH_CREATE 2,5; όπου 2=id και 5=hasharray και θα πρέπει με κάποιο τρόπο να μπορώ να δημιουργήσω ας πούμε 30 διαφορετικά hash με διαφορετικό id και με εντελώς διαφορετικό μέγεθος πίνακα. Έχω κάνει το hashing και κόλλησα σε χαζομάρα.Το ζήτημα μου είναι να κάνω το hashing και να το εμφανίσω αλλά θέλει και αυτό.Και δεν μπορώ να το λύσω.Προσπάθησα να κάνω μέσα στην main το εξής: > struct hashnode{ int value; HashingWithChains hash;; }; hashnode* hashtable=new hashnode; int NumHash=0; int idHashTable[30]; το οποίο προφανώς δεν τρέχει γιατί δεν μπορώ να περάσω το size στον constructor.
georgemarios Δημοσ. 15 Φεβρουαρίου 2009 Δημοσ. 15 Φεβρουαρίου 2009 πραγματικα δυσκολευομαι να καταλαβω τι θες να κανεις. Ωστοσο, μυριζοντας τα νυχια μου, κραταω την τελευταια σου προταση δεν μπορώ να περάσω το size στον constructor και θα προτεινω κατι γενικο. Οταν χρειαζεσαι μια τιμη για να αρχικοποιησεις ενα αντικειμενο η οποια ομως δεν ειναι εκ των προτερων διαθεσιμη (δεν την ξερεις ακομα), τοτε μην κανεις τον constructor να την παιρνει σαν ορισμα. Αντιθετως, βαλε στη κλασση σου μια μεθοδο του στυλ Initialize( <orismata edw> ) και αφου εχεις δημιουργησει το object και οταν εχεις διαθεσιμες τις απαραιτητες τιμες (που ισως τις διαβαζεις απο αρχειο ή τις δινει ο χρηστης) τοτε την καλεις.
Προτεινόμενες αναρτήσεις
Αρχειοθετημένο
Αυτό το θέμα έχει αρχειοθετηθεί και είναι κλειστό για περαιτέρω απαντήσεις.