Re: Why can't a pure virtual function have an inline definition?
On Sep 15, 11:27 am, Frank Buss <f...@frank-buss.de> wrote:
armen.tsirunyan wrote:
It is clearly stated in the current C++ International Standard (2003)
that no virtual function declaration shall contain both a pure
specifier and a definition. I wonder what is the reason of prohibiting
this? I mean, the feature is obviously trivial to implement, it is
more uniform and, well, quite useful. So what considerations am I
missing? Thank you.
It's just an unfortunate syntax quirk. The "= 0" construct has not
been assigned a slot relative to the exception-specification, ref-
qualifier, cv-qualifier, attribute-specifier, and trailing-return-
type.
This is the same as in the ISO IEC 14882-1999, see chapter 10.4.2, and it
makes sense, because the idea of a "pure virtual" function is, that there
is no definition, so why do you think it would be useful? Providing a
defintion for a virtual function might be useful, but I don't see how it
would make sense for pure virtual functions.
"Pure virtual" means that a function is not inserted into the virtual
lookup system, i.e. it's vtable entry is set to 0 or NULL. It may
still be defined, but to call it requires (perhaps ironically)
qualified my_class::my_purevirt_fn() syntax.
But it could be useful to declare an abstract class without any pure
virtual function, like it is possible in Java. I don't know if C++0x
supports this.
Just declare the destructor pure virtual. You can still provide a
definition for that destructor and it will be called not-in-charge.
#include <iostream>
struct S {
virtual ~S() = 0;
};
S::~S() { std::cout << __func__ << '\n'; }
struct T : S {
~T() { std::cout << __func__ << '\n'; }
};
int main() {
T t;
}
output:
~T
~S
{ Sorry for the Quoted Printable encoding occurring here. It's our new mod
software setup. Hopefully we'll get it fixed. - mod/aps }
--
[ See http://www.gotw.ca/resources/clcm.htm for info about ]
[ comp.lang.c++.moderated. First time posters: Do this! ]