Sabonis
04-11-2008, 15:21
class color{
private:
int r_;
int g_;
int b_;
public:
color(){
cout << "costruttore di default" << endl;
r_ = g_ = b_ = 0;
}
color(int r, int g, int b){
cout << "altro costruttore" << endl;
r_ = r;
g_ = g;
b_ = b;
}
color(const color& c){
cout << "costruttore di copia" << endl;
r_ = c.r_;
g_ = c.g_;
b_ = c.b_;
}
const color& operator=(const color& other){
cout << "operator=" << endl;
if(&other != this){
r_ = other.r_;
g_ = other.g_;
b_ = other.b_;
}
return *this;
}
void print(){
cout << r_ << " "<< g_ << " " << b_ << endl;
}
~color(){
cout << "distruttore" << endl;
}
};
color fun(){
color c(10,0,0);
return c;
}
int main(){
color a = fun();
a.print();
}
Compilando questo programma ottengo questo output:
altro costruttore
10 0 0
distruttore
Come mai? Non dovrebbe eseguire il costruttore di copia per effettuare il return?
private:
int r_;
int g_;
int b_;
public:
color(){
cout << "costruttore di default" << endl;
r_ = g_ = b_ = 0;
}
color(int r, int g, int b){
cout << "altro costruttore" << endl;
r_ = r;
g_ = g;
b_ = b;
}
color(const color& c){
cout << "costruttore di copia" << endl;
r_ = c.r_;
g_ = c.g_;
b_ = c.b_;
}
const color& operator=(const color& other){
cout << "operator=" << endl;
if(&other != this){
r_ = other.r_;
g_ = other.g_;
b_ = other.b_;
}
return *this;
}
void print(){
cout << r_ << " "<< g_ << " " << b_ << endl;
}
~color(){
cout << "distruttore" << endl;
}
};
color fun(){
color c(10,0,0);
return c;
}
int main(){
color a = fun();
a.print();
}
Compilando questo programma ottengo questo output:
altro costruttore
10 0 0
distruttore
Come mai? Non dovrebbe eseguire il costruttore di copia per effettuare il return?