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

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

Ερώτηση

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

Καλησπέρα,

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

αυτά..thnks!

Επεξ/σία από aris92

Κοινοποιήστε αυτήν την ανάρτηση


Σύνδεσμος στην ανάρτηση
Κοινοποίηση σε άλλες σελίδες

12 απαντήσεις σε αυτή την ερώτηση

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

  • 0

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

 

 

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

Κοινοποιήστε αυτήν την ανάρτηση


Σύνδεσμος στην ανάρτηση
Κοινοποίηση σε άλλες σελίδες
  • 0

EDIT: αργησα...

 

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

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

 

Κοινοποιήστε αυτήν την ανάρτηση


Σύνδεσμος στην ανάρτηση
Κοινοποίηση σε άλλες σελίδες
  • 0

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

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

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

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

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

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

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

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

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

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

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

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

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

Κοινοποιήστε αυτήν την ανάρτηση


Σύνδεσμος στην ανάρτηση
Κοινοποίηση σε άλλες σελίδες
  • 0

Από C++ δεν ξέρω, αλλά σίγουρα έχει πίνακες ή και κάτι παρόμοιο της ArrayList της Java.

Παράθεση

thnks αλλά πρέπει να το γράψω σε C++

Κοινοποιήστε αυτήν την ανάρτηση


Σύνδεσμος στην ανάρτηση
Κοινοποίηση σε άλλες σελίδες
  • 0

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

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

Κοινοποιήστε αυτήν την ανάρτηση


Σύνδεσμος στην ανάρτηση
Κοινοποίηση σε άλλες σελίδες
  • 0

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

 

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

Κοινοποιήστε αυτήν την ανάρτηση


Σύνδεσμος στην ανάρτηση
Κοινοποίηση σε άλλες σελίδες
  • 0

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

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

Κοινοποιήστε αυτήν την ανάρτηση


Σύνδεσμος στην ανάρτηση
Κοινοποίηση σε άλλες σελίδες
  • 0

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

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

friend int rtrn(Shape s);

friend Point rtrpin(Shape s,int x)

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

 

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

Κοινοποιήστε αυτήν την ανάρτηση


Σύνδεσμος στην ανάρτηση
Κοινοποίηση σε άλλες σελίδες
  • 0

Κάνε ένα s->printPoints() πριν την επιστρέψεις

Είναι αυτό που θες?

Αν είναι φταίει ο copy constructor σου Shape(const Shape &obj);.

Κοινοποιήστε αυτήν την ανάρτηση


Σύνδεσμος στην ανάρτηση
Κοινοποίηση σε άλλες σελίδες
  • 0

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

}

 

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

Κοινοποιήστε αυτήν την ανάρτηση


Σύνδεσμος στην ανάρτηση
Κοινοποίηση σε άλλες σελίδες

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

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

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

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

Εγγραφείτε για έναν νέο λογαριασμό

Σύνδεση

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

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

Χρήσιμες πληροφορίες

Με την περιήγησή σας στο insomnia.gr, αποδέχεστε τη χρήση cookies που ενισχύουν σημαντικά την εμπειρία χρήσης.