Groups | Search | Server Info | Keyboard shortcuts | Login | Register [http] [https] [nntp] [nntps]
Groups > comp.lang.c++ > #13425
| From | "Paul" <pchrist<nospam>or@yahoo.co.uk> |
|---|---|
| Newsgroups | comp.lang.c++ |
| Subject | Re: Rationale for base class pure virtual function call from ctor/dtor being undefined behaviour. |
| Date | 2012-01-16 23:48 +0000 |
| Organization | Netfront http://www.netfront.net/ |
| Message-ID | <jf2d0e$g8u$1@adenine.netfront.net> (permalink) |
| References | (10 earlier) <iZudnd3HOcZeFInSnZ2dnUVZ8sudnZ2d@giganews.com> <jf22hj$8np$1@adenine.netfront.net> <8YydncgNDvB9DInSnZ2dnUVZ8oGdnZ2d@giganews.com> <jf2b8u$f22$1@adenine.netfront.net> <bqGdnd40oMTSKInSnZ2dnUVZ7tKdnZ2d@giganews.com> |
"Leigh Johnston" <leigh@i42.co.uk> wrote in message
news:bqGdnd40oMTSKInSnZ2dnUVZ7tKdnZ2d@giganews.com...
> On 16/01/2012 23:18, Paul <pchrist wrote:
>> "Leigh Johnston"<leigh@i42.co.uk> wrote in message
>> news:8YydncgNDvB9DInSnZ2dnUVZ8oGdnZ2d@giganews.com...
>>> On 16/01/2012 20:49, Paul<pchrist wrote:
>>>> "Leigh Johnston"<leigh@i42.co.uk> wrote in message
>>>> news:iZudnd3HOcZeFInSnZ2dnUVZ8sudnZ2d@giganews.com...
>>>>> On 16/01/2012 19:15, Paul<pchrist wrote:
>>>>>> "Leigh Johnston"<leigh@i42.co.uk> wrote in message
>>>>>> news:Ze6dneM27chs94nSnZ2dnUVZ8sednZ2d@giganews.com...
>>>>> [snip]
>>>>>>> A pure virtual function with a definition is not "just an
>>>>>>> Interface";
>>>>>>> a
>>>>>>> pure virtual function with a definition is simply a virtual function
>>>>>>> that
>>>>>>> must be overridden.
>>>>>>
>>>>>> It's still a pure virtual function, but it provides a default
>>>>>> definition.
>>>>>> However that default definition must be invoked from a non abstract
>>>>>> derived
>>>>>> class thus preserving the interface concept of PVF's.
>>>>>>
>>>>>>> Just because a virtual function must be overridden does not mean
>>>>>>> that
>>>>>>> it
>>>>>>> makes no sense for its own implementation to be called within the
>>>>>>> context
>>>>>>> of the class's ctor or dtor; what makes sense depends on the overall
>>>>>>> object oriented design of the system of which the virtual function
>>>>>>> plays
>>>>>>> a
>>>>>>> part.
>>>>>>>
>>>>>> Now wait, you have evolved to suggest that the PVF is now simply a
>>>>>> normal
>>>>>> virtual function that must be overridden but this is not the case.
>>>>>>
>>>>>> A normal virtual function is inherited and thus can be overridden.
>>>>>> With
>>>>>> a
>>>>>> PVF there is no inheritence so it cannot be overridden, i.e:
>>>>>>
>>>>>> class Base{
>>>>>> public:
>>>>>> virtual void foo();
>>>>>> };
>>>>>> void Base::foo(){std::cout<<"Base foo...\n";}
>>>>>>
>>>>>> class Derived : public Base{
>>>>>> public:
>>>>>> //virtual void foo(){std::cout<<"Derived foo..\n";}
>>>>>> };
>>>>>>
>>>>>> int main(){
>>>>>> Derived d;
>>>>>> Base* bp =&d;
>>>>>> bp->foo();
>>>>>> }
>>>>>>
>>>>>> The above shows how the normal virtual function is inherited and if
>>>>>> Derived::foo is uncommented it would override the Base::foo. But if
>>>>>> you
>>>>>> make
>>>>>> Base:foo pure virtual, Derived won't inherit Base::foo at all. If
>>>>>> Base::foo
>>>>>> is pure virtual it must be *implemented*, not overridden, in Derived:
>>>>>
>>>>> What garbage. My use of the term "overridden" is not incorrect and
>>>>> pure
>>>>> virtual functions can be inherited.
>>>>
>>>> You can't inherit the definition, if I am wrong show me some code that
>>>> does
>>>> this.
>>>
>>> Wrong; see below.
>>>
>>>>
>>>>>
>>>>> From "C++ In A Nutshell":
>>>>>
>>>>> "A derived class can override a pure virtual function and provide a
>>>>> body
>>>>> for it, override it and declare it pure again, or simply inherit the
>>>>> pure
>>>>> function."
>>>>>
>>>> This is talking about inheriting the pure virtual function, as a PVF
>>>> without
>>>> a definition. This is not talking about inheriting and overridding the
>>>> definition of a PVF , which is what you were talking about.
>>>
>>> No it isn't; you don't know what you are talking about as usual. Whether
>>> or not a pure virtual function has a definition has no bearing on the
>>> fact
>>> that it must be implemented in some derived class or on how it is
>>> inherited. Some code:
>>>
>>> struct foo
>>> {
>>> virtual void f() = 0;
>>> };
>>>
>>> void foo::f() {}
>>>
>>> struct bar : foo
>>> {
>>> // does bar inherit foo::f()?
>>> };
>>>
>>> struct baz : bar
>>> {
>>> virtual void f() { bar::foo(); } // yes, bar does inherit foo::f().
>>> };
>>>
>> Ok so you can inherit the definition, but still not in the way I
>> represented( inherited to an instantiatable class). Which was a very
>> important aspect of what I represented because after all this is the
>> point
>> where the PVF must be implemented.
>
> What is "inherited to an instantiatable class" supposed to mean? Nobody
> has suggested that an abstract class can be instantiated however a
> partially constructed object of type abstract base class can exist.
>
>>
>> So you are still incorrect to suggest that a PVF is just a virtual
>> function
>> that must be overridden, because it is certainly alot different than
>> that.
>
> I am not still incorrect. A pure virtual function is a simply a virtual
> function that must be implemented in a derived class, nothing more and the
> standard should reflect this. You have yet to answer the original
> question I posed which is to provide a rationale as to why the standard
> makes it UB to make a virtual call to a pure virtual function that has a
> definition.
>
I see you have now changed your wording to "must be *implemented* in a
derived class".
I will take that as a silent admission of your incorrectness.
As for answering your original question , I have answered but you seen to
fail to understand. I have explained that if it were allowed to invoke PVF
definitions from a constructor in an abstract class it would give the PFV a
behaviour that was not pure. In other words the function could invoke
multiple definitions, or as I said earlier it would no longer represent an
interfase-like concept.
--- Posted via news://freenews.netfront.net/ - Complaints to news@netfront.net ---
Back to comp.lang.c++ | Previous | Next — Previous in thread | Next in thread | Find similar | Unroll thread
Rationale for base class pure virtual function call from ctor/dtor being undefined behaviour. Leigh Johnston <leigh@i42.co.uk> - 2012-01-14 23:06 +0000
Re: Rationale for base class pure virtual function call from ctor/dtor being undefined behaviour. Goran <goran.pusic@gmail.com> - 2012-01-14 22:21 -0800
Re: Rationale for base class pure virtual function call from ctor/dtor being undefined behaviour. "MikeWhy" <boat042-nospam@yahoo.com> - 2012-01-15 02:25 -0600
Re: Rationale for base class pure virtual function call from ctor/dtor being undefined behaviour. Leigh Johnston <leigh@i42.co.uk> - 2012-01-15 14:07 +0000
Re: Rationale for base class pure virtual function call from ctor/dtor being undefined behaviour. "MikeWhy" <boat042-nospam@yahoo.com> - 2012-01-15 13:13 -0600
Re: Rationale for base class pure virtual function call from ctor/dtor being undefined behaviour. "Alf P. Steinbach" <alf.p.steinbach+usenet@gmail.com> - 2012-01-15 09:29 +0100
Re: Rationale for base class pure virtual function call from ctor/dtor being undefined behaviour. Leigh Johnston <leigh@i42.co.uk> - 2012-01-15 14:16 +0000
Re: Rationale for base class pure virtual function call from ctor/dtor being undefined behaviour. "Alf P. Steinbach" <alf.p.steinbach+usenet@gmail.com> - 2012-01-15 15:25 +0100
Re: Rationale for base class pure virtual function call from ctor/dtor being undefined behaviour. Leigh Johnston <leigh@i42.co.uk> - 2012-01-15 14:30 +0000
Re: Rationale for base class pure virtual function call from ctor/dtor being undefined behaviour. gwowen <gwowen@gmail.com> - 2012-01-16 01:57 -0800
Re: Rationale for base class pure virtual function call from ctor/dtor being undefined behaviour. "Alf P. Steinbach" <alf.p.steinbach+usenet@gmail.com> - 2012-01-16 11:28 +0100
Re: Rationale for base class pure virtual function call from ctor/dtor being undefined behaviour. Leigh Johnston <leigh@i42.co.uk> - 2012-01-16 11:29 +0000
Re: Rationale for base class pure virtual function call from ctor/dtor being undefined behaviour. gwowen <gwowen@gmail.com> - 2012-01-16 03:21 -0800
Re: Rationale for base class pure virtual function call from ctor/dtor being undefined behaviour. "Paul" <pchrist<nospam>or@yahoo.co.uk> - 2012-01-16 12:04 +0000
Re: Rationale for base class pure virtual function call from ctor/dtor being undefined behaviour. Leigh Johnston <leigh@i42.co.uk> - 2012-01-16 12:52 +0000
Re: Rationale for base class pure virtual function call from ctor/dtor being undefined behaviour. "Paul" <pchrist<nospam>or@yahoo.co.uk> - 2012-01-16 14:14 +0000
Re: Rationale for base class pure virtual function call from ctor/dtor being undefined behaviour. Leigh Johnston <leigh@i42.co.uk> - 2012-01-16 14:26 +0000
Re: Rationale for base class pure virtual function call from ctor/dtor being undefined behaviour. "Paul" <pchrist<nospam>or@yahoo.co.uk> - 2012-01-16 16:14 +0000
Re: Rationale for base class pure virtual function call from ctor/dtor being undefined behaviour. Leigh Johnston <leigh@i42.co.uk> - 2012-01-16 16:37 +0000
Re: Rationale for base class pure virtual function call from ctor/dtor being undefined behaviour. "Paul" <pchrist<nospam>or@yahoo.co.uk> - 2012-01-16 18:02 +0000
Re: Rationale for base class pure virtual function call from ctor/dtor being undefined behaviour. Leigh Johnston <leigh@i42.co.uk> - 2012-01-16 18:22 +0000
Re: Rationale for base class pure virtual function call from ctor/dtor being undefined behaviour. "Paul" <pchrist<nospam>or@yahoo.co.uk> - 2012-01-16 19:15 +0000
Re: Rationale for base class pure virtual function call from ctor/dtor being undefined behaviour. Leigh Johnston <leigh@i42.co.uk> - 2012-01-16 20:34 +0000
Re: Rationale for base class pure virtual function call from ctor/dtor being undefined behaviour. Leigh Johnston <leigh@i42.co.uk> - 2012-01-16 20:41 +0000
Re: Rationale for base class pure virtual function call from ctor/dtor being undefined behaviour. "Paul" <pchrist<nospam>or@yahoo.co.uk> - 2012-01-16 20:49 +0000
Re: Rationale for base class pure virtual function call from ctor/dtor being undefined behaviour. Leigh Johnston <leigh@i42.co.uk> - 2012-01-16 21:08 +0000
Re: Rationale for base class pure virtual function call from ctor/dtor being undefined behaviour. Leigh Johnston <leigh@i42.co.uk> - 2012-01-16 21:11 +0000
Re: Rationale for base class pure virtual function call from ctor/dtor being undefined behaviour. "Paul" <pchrist<nospam>or@yahoo.co.uk> - 2012-01-16 23:18 +0000
Re: Rationale for base class pure virtual function call from ctor/dtor being undefined behaviour. Leigh Johnston <leigh@i42.co.uk> - 2012-01-16 23:39 +0000
Re: Rationale for base class pure virtual function call from ctor/dtor being undefined behaviour. "Paul" <pchrist<nospam>or@yahoo.co.uk> - 2012-01-16 23:48 +0000
Re: Rationale for base class pure virtual function call from ctor/dtor being undefined behaviour. Leigh Johnston <leigh@i42.co.uk> - 2012-01-16 23:57 +0000
Re: Rationale for base class pure virtual function call from ctor/dtor being undefined behaviour. "Paul" <pchrist<nospam>or@yahoo.co.uk> - 2012-01-17 12:24 +0000
Re: Rationale for base class pure virtual function call from ctor/dtor being undefined behaviour. Leigh Johnston <leigh@i42.co.uk> - 2012-01-17 14:11 +0000
Re: Rationale for base class pure virtual function call from ctor/dtor being undefined behaviour. gwowen <gwowen@gmail.com> - 2012-01-17 06:43 -0800
Re: Rationale for base class pure virtual function call from ctor/dtor being undefined behaviour. Leigh Johnston <leigh@i42.co.uk> - 2012-01-17 14:52 +0000
Re: Rationale for base class pure virtual function call from ctor/dtor being undefined behaviour. gwowen <gwowen@gmail.com> - 2012-01-17 07:22 -0800
Re: Rationale for base class pure virtual function call from ctor/dtor being undefined behaviour. "Paul" <pchrist<nospam>or@yahoo.co.uk> - 2012-01-17 16:35 +0000
Re: Rationale for base class pure virtual function call from ctor/dtor being undefined behaviour. Leigh Johnston <leigh@i42.co.uk> - 2012-01-17 16:40 +0000
Re: Rationale for base class pure virtual function call from ctor/dtor being undefined behaviour. "Paul" <pchrist<nospam>or@yahoo.co.uk> - 2012-01-17 17:30 +0000
Re: Rationale for base class pure virtual function call from ctor/dtor being undefined behaviour. "Paul" <pchrist<nospam>or@yahoo.co.uk> - 2012-01-18 10:38 +0000
Re: Rationale for base class pure virtual function call from ctor/dtor being undefined behaviour. Leigh Johnston <leigh@i42.co.uk> - 2012-01-18 11:57 +0000
Re: Rationale for base class pure virtual function call from ctor/dtor being undefined behaviour. "Paul" <pchrist<nospam>or@yahoo.co.uk> - 2012-01-18 12:49 +0000
Re: Rationale for base class pure virtual function call from ctor/dtor being undefined behaviour. gwowen <gwowen@gmail.com> - 2012-01-17 08:59 -0800
Re: Rationale for base class pure virtual function call from ctor/dtor being undefined behaviour. Leigh Johnston <leigh@i42.co.uk> - 2012-01-17 17:03 +0000
Re: Rationale for base class pure virtual function call from ctor/dtor being undefined behaviour. "MikeWhy" <boat042-nospam@yahoo.com> - 2012-01-17 11:34 -0600
Re: Rationale for base class pure virtual function call from ctor/dtor being undefined behaviour. "MikeWhy" <boat042-nospam@yahoo.com> - 2012-01-17 12:14 -0600
Re: Rationale for base class pure virtual function call from ctor/dtor being undefined behaviour. Gareth Owen <gwowen@gmail.com> - 2012-01-18 06:37 +0000
Re: Rationale for base class pure virtual function call from ctor/dtor being undefined behaviour. "MikeWhy" <boat042-nospam@yahoo.com> - 2012-01-18 13:08 -0600
Re: Rationale for base class pure virtual function call from ctor/dtor being undefined behaviour. "MikeWhy" <boat042-nospam@yahoo.com> - 2012-01-18 13:14 -0600
Re: Rationale for base class pure virtual function call from ctor/dtor being undefined behaviour. "Paul" <pchrist<nospam>or@yahoo.co.uk> - 2012-01-17 15:50 +0000
Re: Rationale for base class pure virtual function call from ctor/dtor being undefined behaviour. Leigh Johnston <leigh@i42.co.uk> - 2012-01-17 15:59 +0000
Re: Rationale for base class pure virtual function call from ctor/dtor being undefined behaviour. "Paul" <pchrist<nospam>or@yahoo.co.uk> - 2012-01-17 16:09 +0000
Re: Rationale for base class pure virtual function call from ctor/dtor being undefined behaviour. jgk@panix.com (Joe keane) - 2012-01-17 16:13 +0000
Re: Rationale for base class pure virtual function call from ctor/dtor being undefined behaviour. scott@slp53.sl.home (Scott Lurndal) - 2012-01-18 18:11 +0000
Re: Rationale for base class pure virtual function call from ctor/dtor being undefined behaviour. gwowen <gwowen@gmail.com> - 2012-01-16 06:34 -0800
Re: Rationale for base class pure virtual function call from ctor/dtor being undefined behaviour. Gil <vnicula@gmail.com> - 2012-01-16 20:55 -0800
Re: Rationale for base class pure virtual function call from ctor/dtor being undefined behaviour. Leigh Johnston <leigh@i42.co.uk> - 2012-01-17 17:58 +0000
Re: Rationale for base class pure virtual function call from ctor/dtor being undefined behaviour. scott@slp53.sl.home (Scott Lurndal) - 2012-01-18 18:12 +0000
Re: Rationale for base class pure virtual function call from ctor/dtor being undefined behaviour. Leigh Johnston <leigh@i42.co.uk> - 2012-01-18 19:00 +0000
Re: Rationale for base class pure virtual function call from ctor/dtor being undefined behaviour. "Paul" <pchrist<nospam>or@yahoo.co.uk> - 2012-01-18 22:00 +0000
Re: Rationale for base class pure virtual function call from ctor/dtor being undefined behaviour. Gareth Owen <gwowen@gmail.com> - 2012-01-19 06:22 +0000
csiph-web