Re: Deriving from concrete types
Gene Bushuyev wrote:
"kanze" <kanze@gabi-soft.fr> wrote in message
news:1151579722.532659.219890@b68g2000cwa.googlegroups.com...
Gene Bushuyev wrote:
[...]
That pretty much restricts derivation to virtual functions,
If you don't have virtual functions, it is pretty clear that you
are not using C++ derivation to implement the design concept of
inheritance, but for some other reason.
What are those other reasons?
In the case of std::iterator<>, providing typedef's. In
general, I often derive from traits classes for convenience
reasons; I think it's a common idiom.
I'm repeating myself, but since nobody addressed it, I do it
again. Public inheritance can be used for two purposes: to
extend the base class overriding virtual functions
(substitution principle), or to reuse the base class in
derived. The later can be justified in some template
patterns, but not in general case.
I think you're being overly restrictive. C++ derivation is an
implementation technique. It has certain, very specific results
within the language. I would not care to guess what techniques
people may or may not come up with.
It is a fact, I think, that C++ derivation was initially
conceived to implement OO inheritance, and that that is, even
today, by far its most widespread use. If I design a class to
be used as a base class for some other reason, I will take extra
pains in documenting that it is not the usual reason. But that
doesn't mean that any other reason is wrong. Or to pick up on
your words, the fact that something is not the general (or
usual) case doesn't make it wrong (although it may mean that
additional documentation is required).
(Actually, I'm not sure we disagree that much. Replace the word
"template" with "special" in your last sentence, and I"d have no
problem with it. The most frequent case---the default case, in
my mind---for public derivation, is OO inheritance. Anything
else is "special".)
--
James Kanze kanze.james@neuf.fr
Conseils en informatique orient?e objet/
Beratung in objektorientierter Datenverarbeitung
9 place S?mard, 78210 St.-Cyr-l'?cole, France +33 (0)1 30 23 00 34
[ See http://www.gotw.ca/resources/clcm.htm for info about ]
[ comp.lang.c++.moderated. First time posters: Do this! ]