|
|
Derive or not to
Generally, what should be done to make a class not expected to be derived
from?
What should be done to a class to make it derivable?
In an abstract base class, the destructor is automatically "virtual?
If the constructor of a class is protected or private, how to code the class
so that it provides a public member function, or to declare a friend that
has access to the protected or private constructor and thus the class
becomes instantiable?
Thanks for your comments!
|
|
0
|
|
|
|
Reply
|
sleding (7)
|
4/28/2004 6:55:24 AM |
|
"bobsled" <sleding@sands.com> wrote in message
news:wzIjc.30233$_o3.999376@bgtnsc05-news.ops.worldnet.att.net...
> Generally, what should be done to make a class not expected to be derived
> from?
There is no final keyword like Java to stop derivation in C++.
There is a way though. Read this -
http://www.research.att.com/~bs/bs_faq2.html#no-derivation
> What should be done to a class to make it derivable?
By default it is derivable.
> In an abstract base class, the destructor is automatically "virtual?
No
> If the constructor of a class is protected or private, how to code the class
> so that it provides a public member function, or to declare a friend that
> has access to the protected or private constructor and thus the class
> becomes instantiable?
You could do either way, depends on what you are trying to achieve. The public
member function of the class has to be static though.
-Sharad
|
|
0
|
|
|
|
Reply
|
no.spam_sharadk_ind (200)
|
4/28/2004 7:23:06 AM
|
|
On Wed, 28 Apr 2004 06:55:24 GMT, "bobsled" <sleding@sands.com> wrote:
>Generally, what should be done to make a class not expected to be derived
>from?
Don't give it any virtual functions and document the fact that it is a
concrete class. It is possible to force non-derivation, but there
generally isn't much point.
>What should be done to a class to make it derivable?
Give it at least one virtual function, and document how that should be
overridden. You will almost always want a virtual destructor too.
>In an abstract base class, the destructor is automatically "virtual?
No, you have to explicitly declare it to be virtual.
>If the constructor of a class is protected or private, how to code the class
>so that it provides a public member function, or to declare a friend that
>has access to the protected or private constructor and thus the class
>becomes instantiable?
friend class MyFriend;
or
public:
static Foo* createFoo() {return new Foo();}
unless I didn't understand the question?
Tom
--
C++ FAQ: http://www.parashift.com/c++-faq-lite/
C FAQ: http://www.eskimo.com/~scs/C-faq/top.html
|
|
0
|
|
|
|
Reply
|
tom_usenet3 (1118)
|
4/28/2004 11:38:30 AM
|
|
|
2 Replies
44 Views
(page loaded in 0.12 seconds)
|
|
|
|
|
|
|
|
|