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

Απορία για παράμετρος συνάρτησης


aris92

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

Δημοσ. (επεξεργασμένο)

Καλησπέρα,

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

αυτά..thnks!

Επεξ/σία από aris92
Συνδέστε για να σχολιάσετε
Κοινοποίηση σε άλλες σελίδες

Έτοιμη την έχω

 

 

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 αντικείμενα να τα κάνω ένα

Συνδέστε για να σχολιάσετε
Κοινοποίηση σε άλλες σελίδες

Σε ποια γλωσσα;

"όλα τα σημεία και των δύο αντικειμένων" τι ακριβως εννοεις;

Nαι όντως σόρρυ ξέχασα να πω. Στην C++

Λοιπόν αρχικά έχω μια κλάση Point που αναπαριστά ένα σημείο στον 2D καρτεσιανό

χώρο με πραγματικές συντεταγμένες

Μετά έχω μια κλάση Shape που αναπαριστά ένα σχήμα που αποτελείται από N

σημεία τύπου Point

και τώρα θέλω μια συνάρτηση join(), η οποία παίρνει σαν παραμέτρους δύο

αντικείμενα κλάσης Shape, και επιστρέφει ένα αντικείμενο κλάσης Shape το

οποίο αποτελείται από όλα τα σημεία και των δύο αντικειμένων. Τα σημεία

να είναι διατεταγμένα με την σειρά των σημείων των δύο αντικειμένων, δλδ

το επιστρεφόμενο αντικείμενο έχει πρώτα τα σημεία του πρώτου

αντικειμένου και μετά ακολουθούν του δεύτερου.

Συνδέστε για να σχολιάσετε
Κοινοποίηση σε άλλες σελίδες

Δεν το δοκίμασα αλλά κάπως έτσι

>
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;
}

Συνδέστε για να σχολιάσετε
Κοινοποίηση σε άλλες σελίδες

το πρόβλημα μου είναι ότι πως η συνάρτηση 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

 

γιατί αφού χρησιμοποιώ τις φίλιες συναρτήσεις??

Συνδέστε για να σχολιάσετε
Κοινοποίηση σε άλλες σελίδες

Δεν βλέπω να έχεις κάνει friend την join (εφόσον δεν είναι της Shape) ,ούτε την δήλωσες να επιστρέφει Shape

Αν είναι friend η join έχει πρόσβαση στα pin και n. Δεν χρειάζεται άλλες friend.

Συνδέστε για να σχολιάσετε
Κοινοποίηση σε άλλες σελίδες

πω έκανα μεγάλη βλακεία και το κατάλαβα τώρα και πρέπει να το τελειώσω μέχρι τις 12.00 :Ρ

αντί να κάνω την join friend έκανα 2 άλλες συναρτήσεις τις

friend int rtrn(Shape s);

friend Point rtrpin(Shape s,int x)

που δεν χρειάζονται πουθενά..

 

τελικά μου τρέχει αλλά βγάζει λάθος αποτελέσματα δλδ στον πίνακα δεν περνάνε οι σωστές τιμές.. :mellow:

Συνδέστε για να σχολιάσετε
Κοινοποίηση σε άλλες σελίδες

Κάνε ένα 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;

}

 

και νομίζω δουλεύει τώρα

Συνδέστε για να σχολιάσετε
Κοινοποίηση σε άλλες σελίδες

Δημιουργήστε ένα λογαριασμό ή συνδεθείτε για να σχολιάσετε

Πρέπει να είστε μέλος για να αφήσετε σχόλιο

Δημιουργία λογαριασμού

Εγγραφείτε με νέο λογαριασμό στην κοινότητα μας. Είναι πανεύκολο!

Δημιουργία νέου λογαριασμού

Σύνδεση

Έχετε ήδη λογαριασμό; Συνδεθείτε εδώ.

Συνδεθείτε τώρα
  • Δημιουργία νέου...