xxxxxxxxxx
//-------------------------------------------------------------------
// Προβληματική συνάρτηση, αν κληθεί με κάτι άλλο από μεταβλητή,
// αφού απαγορεύεται να χρησιμοποιηθεί αναφορά σε προσωρινό αντικείμενο.
void print_bad( std::string& s ) { // όρισμα χωρίς const
std::cout << s << std::endl;
}
// Καλώς ορισμένη συνάρτηση:
void print_good( const std::string& s ) {
std::cout << s << std::endl;
}
std::string hello("Hello");
print_bad( hello ); // επιτυχής μεταγλώττιση, αφού το hello δεν είναι προσωρινό
print_bad( std::string("World") ); // λάθος, το όρισμα είναι προσωρινό
print_bad( "!" ); // λάθος, κατασκευάζεται προσωρινό std::string από const char*
print_good( hello ); // επιτυχής μεταγλώττιση
print_good( std::string("World") ); // επιτυχής μεταγλώττιση
print_good( "!" ); // επιτυχής μεταγλώττιση
//-------------------------------------------------------------------
class MyClass {
int x;
char c;
std::string s;
};
MyClass& MyClass::operator=( const MyClass& other ) {
x = other.x; // other : το αντικείμενο δεξιά του τελεστή =
c = other.c;
s = other.s; // this : δείκτης προς το τρέχον αντικείμενο,
return *this; // δηλαδή προς το αντικείμενο αριστερά του τελεστή =
}
//-------------------------------------------------------------------
using namespace std;
class Test {
public:
Test() {}
Test(const Test &t) {
cout << "Copy constructor called" << endl;
}
Test& operator = (const Test &t) {
cout << "Assignment operator called" << endl;
}
};
int main() {
Test t1, t2; // Δημιουργία των στιγμιοτύπων t1 και t2
t2 = t1; // Στο t2 γίνεται ανάθεση του t1
Test t3 = t1; // Δημιουργία του στιγμιοτύπου t3 με αντιγραφή του t1 σε αυτό
// Είναι ισοδύναμο με: Test t3(t1);
}
// έξοδος στην οθόνη:
// Assignment operator called
// Copy constructor called
//-------------------------------------------------------------------