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

default copy constructor & assignment operator


riak

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

Δημοσ.

Μπορείται να μου πείτε ποιοι είναι οι default copy constructor και assignment operator στο παρακάτω κώδικα?

>
[b]public:[/b]

[indent]Square();
Square(double);
virtual ~Square();
double getSide() const;
void setSide(double);
[/indent]

Δημοσ.

Ο default copy constructor είναι αυτός που παράγει ο compiler σε περίπτωση που δεν ορίσεις εσύ έναν. Όπως αντιλαμβάνεσαι (?), δεν είναι δυνατόν να βρεις *default* copy constructor σε κώδικα.

 

Για να είναι μια μέθοδος operator overloader θα πρέπει να φέρει το όνομα "operator" ακολουθούμενο από τον operator που κάνει overload. Όπως ξανα-αντιλαμβάνεσαι (?), από τη στιγμή που δεν υπάρχει αυτή η λέξη στον κώδικα που παρέθεσες, δεν μπορεί να υπάρξει και αυτό που ζητάς.

 

Φιλική συμβουλή: Άλλαξε κατεύθυνση όσο είναι καιρός...

Δημοσ.

Σε ευχαριστώ φίλε για την συμβουλή σου κ το χρόνο σου,αλλά όταν κάποιος έχει μια απορία δε σημαίνει ότι πρέπει να αλλάξει κ κατεύθυνση. Αυτά που μου είπες τα ήξερα ήδη,απλά ένα σχόλειο που είδα για αυτόν τον κώδικα με μπέρδεψε,κ προς στιγμή νόμισα ότι είχε κάτι σχετικό ο κώδικας που εγώ δεν το ήξερα!

Δημοσ.
Μπορείται να μου πείτε ποιοι είναι οι default copy constructor και assignment operator στο παρακάτω κώδικα?

>
[b]public:[/b]

[indent]Square();
Square(double);
virtual ~Square();
double getSide() const;
void setSide(double);
[/indent]

Square(const Square& a);

Square& operator =(const Square& a);

πάντως και να μην τους ορίσεις εσύ, αν μπορέσει θα τους ορίσει ο compiler (ο compiler μπορεί να τους ορίσει, όταν όλα τα members έχουν τέτοιους).

Αν δεν μπορέσει και ο compiler παλι δεν πειράζει, είναι warning.

Δηλαδη δεν είναι απαραιτητο να υπάρχουν.

 

Αν ομως στον κωδικα σου εχεις εντολή

Square b;

Square a = b; //εδω ζητάμε copy constructor, αρα πρέπει να υπάρχει

 

Square c(B); //εδω ζητάμε copy constructor, αρα πρέπει να υπάρχει

Square a,b;

a = b; //εδω ζητάμε assignment operator

Δημοσ.

Σε ευχαριστώ πάρα πολύ bxenos!!Μου έλυσες κ την παραμικρή απορία-αμφιβολεία που είχα!

Δημοσ.

@bxenos: αν ο compiler δε μπορεί να σου δώσει μια default συνάρτηση, τότε θα δώσει error όταν προσπαθήσεις να την καλέσεις. Για ποιο warning μιλάς;

Δημοσ.
@bxenos: αν ο compiler δε μπορεί να σου δώσει μια default συνάρτηση, τότε θα δώσει error όταν προσπαθήσεις να την καλέσεις. Για ποιο warning μιλάς;

Δεν είπα κάτι διαφορετικό

Αν δεν μπορέσει και ο compiler παλι δεν πειράζει' date=' είναι warning.

Δηλαδη [b']δεν είναι απαραιτητο να υπάρχουν[/b].

 

Αν ομως στον κωδικα σου εχεις εντολή

Square b;

Square a = b; //εδω ζητάμε copy constructor, αρα πρέπει να υπάρχει

 

π.χ. ο microsoft vs 2008 αν δεν μπορεί να φτιάξει copy constructor σε warning level 4 (ίσως και 3), θα βγάλει warning. Δεν είναι σφάλμα αν δεν έχεις καλέσει πουθενά τον copy constructor.

Αρχειοθετημένο

Αυτό το θέμα έχει αρχειοθετηθεί και είναι κλειστό για περαιτέρω απαντήσεις.

  • Δημιουργία νέου...