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

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

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

Καλησπέρα,

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

αυτά..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;

}

 

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

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

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

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

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

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

Σύνδεση

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

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