class Dog {
public:
virtual Dog* clone() { return (new Dog(*this)); } // co-variant return type
};
class Yellowdog : public Dog {
virtual Yellowdog* clone() { return (new Yellowdog(*this)); }
};
void foo(Dog* d) { // d is a Yellowdog
//Dog* c = new Dog(*d); // c is a Dog
Dog* c = d->clone(); // c is a Yellowdog
//...
//
}
int main() {
Yellowdog d;
foo(&d);
}
public:
virtual Dog* clone() { return (new Dog(*this)); } // co-variant return type
};
class Yellowdog : public Dog {
virtual Yellowdog* clone() { return (new Yellowdog(*this)); }
};
void foo(Dog* d) { // d is a Yellowdog
//Dog* c = new Dog(*d); // c is a Dog
Dog* c = d->clone(); // c is a Yellowdog
//...
//
}
int main() {
Yellowdog d;
foo(&d);
}
Comments
Post a Comment