* Thomas J. Gritzan:
> Alf P. Steinbach wrote:
>> * Thomas J. Gritzan:
>>> mr.xiaofan.li@gmail.com wrote:
>>>> class virt_base
>>>> {
>>> [...]
>>>> virtual virt_base* cut()
>>>> {
>>>> return new virt_base();
>>>> }
>>> [...]
>>>> };
>>>>
>>>> class virt_derived
>>>> : public virt_base
>>>> {
>>> [...]
>>>> virtual virt_derived* cut()
>>>> {
>>>> return new virt_derived();
>>>> }
>>> [...]
>>>> };
>>>
>>> The covariant return type lets you override a function with a more
>>> strict function, i.e. a function returning a derived type. However,
>>> type checking is done at compile time, so your compiler has to know,
>>> that the object you are calling cut() on is a virt_derived.
>>>
>>>> int main()
>>>> {
>>>> virt_base* my_virt_derived = new virt_derived();
>>>
>>> Change this to
>>> virt_derived* my_virt_derived = new virt_derived();
>>
>> That would make the code compile, but would defeat the pupose of the
>> code.
>
> That would be with your code change:
>
> virt_base* my_virt_derived = new virt_derived();
> virt_base* new_virt_derived = my_virt_derived->cut();
>
> No need for covariant return types, since both pointers are virt_base*
> and virt_base::cut returns virt_base*.
>
> Since we want to show how to use covariant return types, we have to
> declare both pointers as virt_derived*.
>
> I guess one of us needs a cup of coffee again :-)
Heh.
I seems I need to stop pointing out my own mistakes (like the coffee
thing), lest people think that someone who does that is mistaken all the
time or most of the time -- but I refuse to cater to such perceptions.
You're partially right. There are two things to show. First, that that
covariant function works as an override (needing a virt_base* to show
that), which I consider primary, otherwise it wouldn't need to be
virtual, and your suggestion doesn't call the virtuality into play.
Second, that when the static type my_virt_derived is known the covariant
function provides a way to avoid casting, and your suggestion does that.
Cheers,
- Alf
--
A: Because it messes up the order in which people normally read text.
Q: Why is it such a bad thing?
A: Top-posting.
Q: What is the most annoying thing on usenet and in e-mail?