On 4/8/2015 4:01 PM, Doug Mika wrote:
On Wednesday, April 8, 2015 at 2:28:26 PM UTC-6, Doug Mika wrote:
I have the following two classes:
class Fish{
public:
virtual Fish* Clone()=0;
virtual void Swim()=0;
};
class Tune:public Fish{
public:
Fish* Clone(){
return new Tuna(*this);
}
void Swim(){
cout<<"Tuna swims fast in the sea"<<endl;
}
};
my question is, what is new Tuna(*this) when Tuna doesn't define a
constructor that takes a parameter. It only has the default
parameterless constructor! So what is: new Tuna(*this);
Much thanks
Doug
so the "new" keyword can invoke the copy constructor?
You get a default constructor, copy constructor, deconstructor if one is
not defined.
It is not the "new" keyword, but the fact that you are creating a Tuna.
You could also have created it on the stack and had the same effect,
although its lifetime would have ended when it went out of scope.
It is also unwise to implement such methods as "Clone". Silly methods
like those are often carried over from people who want to shape and mold
C++ to be like Java or wherever they came from. We don't need a clone
method, because we already have the means to make a copy...via the copy
constructor:
A clone method is not silly mate. A clone method is typically used in
concrete sausages.
decision that enables, for example, unit testing and TDD.