aris92 Δημοσ. 25 Νοεμβρίου 2012 Δημοσ. 25 Νοεμβρίου 2012 (επεξεργασμένο) Καλησπέρα, Θέλω να δημιουργήσω μια συνάρτηση η οποία θα έχει σαν παραμέτρους δυο αντικείμενα μιας κλάσης και επιστρέφει ένα αντικείμενο της κλάσης το οποίο αποτελείται από όλα τα σημεία και των δύο αντικειμένων.Τα σημεία να είναι διατεταγμένα με την σειρά των σημείων των δύο αντικειμένων. Πως μπορώ να το υλοποιήσω αυτό? αυτά..thnks! Επεξ/σία 25 Νοεμβρίου 2012 από aris92
defacer Δημοσ. 25 Νοεμβρίου 2012 Δημοσ. 25 Νοεμβρίου 2012 Ξεκίνα φτιάχνοντας την class στην οποία αναφέρεσαι.
aris92 Δημοσ. 25 Νοεμβρίου 2012 Μέλος Δημοσ. 25 Νοεμβρίου 2012 Έτοιμη την έχω class Shape{ int n; //ari8mos shmeiwn Point *pin; //pinakas me tis suntetagmenes public: Shape(int o,Point *p); Shape(){cout<<"Warning: shape has no points \n";}; void setPoint(int x,Point po); void set(int y,Point* pi); void printPoints(); Shape(const Shape &obj); απλώς δεν ξέρω πως μπορώ να κάνω αυτό που μου ζητάει δηλ 2 αντικείμενα να τα κάνω ένα
nilosgr Δημοσ. 25 Νοεμβρίου 2012 Δημοσ. 25 Νοεμβρίου 2012 EDIT: αργησα... Σε ποια γλωσσα; "όλα τα σημεία και των δύο αντικειμένων" τι ακριβως εννοεις;
aris92 Δημοσ. 25 Νοεμβρίου 2012 Μέλος Δημοσ. 25 Νοεμβρίου 2012 Σε ποια γλωσσα; "όλα τα σημεία και των δύο αντικειμένων" τι ακριβως εννοεις; Nαι όντως σόρρυ ξέχασα να πω. Στην C++ Λοιπόν αρχικά έχω μια κλάση Point που αναπαριστά ένα σημείο στον 2D καρτεσιανό χώρο με πραγματικές συντεταγμένες Μετά έχω μια κλάση Shape που αναπαριστά ένα σχήμα που αποτελείται από N σημεία τύπου Point και τώρα θέλω μια συνάρτηση join(), η οποία παίρνει σαν παραμέτρους δύο αντικείμενα κλάσης Shape, και επιστρέφει ένα αντικείμενο κλάσης Shape το οποίο αποτελείται από όλα τα σημεία και των δύο αντικειμένων. Τα σημεία να είναι διατεταγμένα με την σειρά των σημείων των δύο αντικειμένων, δλδ το επιστρεφόμενο αντικείμενο έχει πρώτα τα σημεία του πρώτου αντικειμένου και μετά ακολουθούν του δεύτερου.
nilosgr Δημοσ. 25 Νοεμβρίου 2012 Δημοσ. 25 Νοεμβρίου 2012 Από C++ δεν ξέρω, αλλά σίγουρα έχει πίνακες ή και κάτι παρόμοιο της ArrayList της Java.
aris92 Δημοσ. 25 Νοεμβρίου 2012 Μέλος Δημοσ. 25 Νοεμβρίου 2012 Από C++ δεν ξέρω, αλλά σίγουρα έχει πίνακες ή και κάτι παρόμοιο της ArrayList της Java. Παράθεσηthnks αλλά πρέπει να το γράψω σε C++
albNik Δημοσ. 25 Νοεμβρίου 2012 Δημοσ. 25 Νοεμβρίου 2012 Δεν το δοκίμασα αλλά κάπως έτσι > Shape::Shape join(Shape& first, Shape& second) { Shape* s=new Shape(); s->n=first.n+second.n; s->pin=new Point[s->n]; for(int i=0;i<first.n;i++) s->pin[i]=first.pin[i]; for(int i=first.n;i<s->n;i++) s->pin[i]=second.pin[i-first.n]; return *s; }
aris92 Δημοσ. 25 Νοεμβρίου 2012 Μέλος Δημοσ. 25 Νοεμβρίου 2012 το πρόβλημα μου είναι ότι πως η συνάρτηση join() δεν ανήκει στην Shape οπότε πρέπει να δουλέψω με φίλιες συναρτήσεις έχω κάνει τις εξής: class Shape{ int n; Point *pin; public: Shape(int o,Point *p); Shape(){cout<<"Warning: shape has no points \n";}; void setPoint(int x,Point po); void set(int y,Point* pi); void printPoints(); Shape(const Shape &obj); friend int rtrn(Shape s); friend Point rtrpin(Shape s,int x); join(Shape& first, Shape& second); ~ Shape(); }; int rtrn(Shape s) { {return s.n;}; } Point rtrpin(Shape s,int x) { return s.pin[x]; } και μετά τροποποίησα αυτό που μου έστειλες Shape join(Shape& first, Shape& second) { Shape* s=new Shape(); s->n=rtrn(first)+rtrn(second); s->pin=new Point[s->n]; for(int i=0;i<rtrn(first);i++) s->pin=rtrpin(first,i); for(int i=rtrn(first);i<s->n;i++) s->pin=rtrpin(second,i-rtrn(first)]; return *s; } αλλά πάλι μου βγάζει μηνύματα όπως `int Shape::n' is private γιατί αφού χρησιμοποιώ τις φίλιες συναρτήσεις??
albNik Δημοσ. 25 Νοεμβρίου 2012 Δημοσ. 25 Νοεμβρίου 2012 Δεν βλέπω να έχεις κάνει friend την join (εφόσον δεν είναι της Shape) ,ούτε την δήλωσες να επιστρέφει Shape Αν είναι friend η join έχει πρόσβαση στα pin και n. Δεν χρειάζεται άλλες friend.
aris92 Δημοσ. 25 Νοεμβρίου 2012 Μέλος Δημοσ. 25 Νοεμβρίου 2012 πω έκανα μεγάλη βλακεία και το κατάλαβα τώρα και πρέπει να το τελειώσω μέχρι τις 12.00 :Ρ αντί να κάνω την join friend έκανα 2 άλλες συναρτήσεις τις friend int rtrn(Shape s); friend Point rtrpin(Shape s,int x) που δεν χρειάζονται πουθενά.. τελικά μου τρέχει αλλά βγάζει λάθος αποτελέσματα δλδ στον πίνακα δεν περνάνε οι σωστές τιμές..
albNik Δημοσ. 25 Νοεμβρίου 2012 Δημοσ. 25 Νοεμβρίου 2012 Κάνε ένα s->printPoints() πριν την επιστρέψεις Είναι αυτό που θες? Αν είναι φταίει ο copy constructor σου Shape(const Shape &obj);.
aris92 Δημοσ. 25 Νοεμβρίου 2012 Μέλος Δημοσ. 25 Νοεμβρίου 2012 Κάνε ένα s->printPoints() πριν την επιστρέψεις Είναι αυτό που θες? Αν είναι φταίει ο copy constructor σου Shape(const Shape &obj);. και ναι φταίει ο copy constructor!!:Ρ αυτός είναι ο ένοχος: Shape::Shape(const Shape &obj) { *pin=*obj.pin; n=obj.n; } πραγματικά 1000 ευχαριστώ για την βοήθεια σου! τον έκανα Shape::Shape(const Shape &obj) { pin=obj.pin; n=obj.n; } και νομίζω δουλεύει τώρα
Προτεινόμενες αναρτήσεις
Δημιουργήστε ένα λογαριασμό ή συνδεθείτε για να σχολιάσετε
Πρέπει να είστε μέλος για να αφήσετε σχόλιο
Δημιουργία λογαριασμού
Εγγραφείτε με νέο λογαριασμό στην κοινότητα μας. Είναι πανεύκολο!
Δημιουργία νέου λογαριασμούΣύνδεση
Έχετε ήδη λογαριασμό; Συνδεθείτε εδώ.
Συνδεθείτε τώρα