Re: Possible to require overloading of a non-pure method?
Thomas J. Gritzan wrote:
[rob desbois] schrieb:
On Apr 25, 12:46 pm, Pete Becker <p...@versatilecoding.com> wrote:
On 2008-04-25 06:40:20 -0400, "[rob desbois]"
<rob.desb...@gmail.com> said:
Hi all, I have a set of classes which implement the virtual
constructor idiom.
I had a slicing problem which resulted when I forgot to override
the clone() function in a derived class.
Is there something (other than documentation) that I can do to
prevent this from happening again?
Unit testing and code reviews.
Allow me to clarify. I meant is there any language construct which
can enforce this requirement.
A unit test wouldn't have helped -- I'd have had to remember to write
a unit test for the new class's clone() method ensuring that the
returned pointer is castable to a pointer to the new derived type. If
I'd have remembered that I'd have remembered to code the clone method
anyway.
"Design by Contract".
Something like (untestet):
class Base
{
public:
Base* clone() const
{
Base* p = doClone();
assert(typeid(*p) == typeid(*this));
return p;
}
private:
Base* doClone() const
{
return new Base(*this);
}
}
;
First off, no virtual functions here, did you mean to make 'doClone'
virtual? And second, he needed the compile-time solution, AIUI.
And how does 'typeid' trick work? Does 'typeid' return the dynamic
type of '*this'? So, if you derive from 'Base', what then? How
does the splitting of the function in two help _forcing_ the derived
class provide the override?
V
--
Please remove capital 'A's when replying by e-mail
I do not respond to top-posted replies, please don't ask