Re: new Class(*this)
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:
#include <iostream>
using namespace std;
class Fish
{
public:
// Constructor made for you, if you don't make one
Fish() {};
// Copy Constructor made for you, if you don't make one
Fish(const Fish & fish) {}
// Deconstructor made for you, if you don't make one
// Except, I don't think the default would be virtual
virtual ~Fish() {};
// Made the class abstract. Cannot instantiate a Fish anymore
virtual void Swim() = 0;
};
class Tuna : public Fish
{
public:
Tuna()
:
Fish()
{
}
Tuna(const Tuna & rhs)
:
Fish(rhs)
{
}
~Tuna()
{
}
// Implements Fish
void Swim()
{
cout << "Tuna swims fast in the sea"<< endl;
}
};
int main()
{
Tuna fishyA;
Tuna fishyB(fishyA); // I 'cloned' it or better 'copied'
Tuna * fishyC = new Tuna(fishyB);
delete fishyC;
return 0;
}
--
I have chosen to troll filter/ignore all subthreads containing the
words: "Rick C. Hodgins", "Flibble", and "Islam"
So, I won't be able to see or respond to any such messages
---