Connecting Tech Pros Worldwide Help | Site Map

Derive or not to

bobsled
Guest
 
Posts: n/a
#1: Jul 22 '05
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!


Sharad Kala
Guest
 
Posts: n/a
#2: Jul 22 '05

re: Derive or not to



"bobsled" <sleding@sands.com> wrote in message
news:wzIjc.30233$_o3.999376@bgtnsc05-news.ops.worldnet.att.net...[color=blue]
> Generally, what should be done to make a class not expected to be derived
> from?[/color]

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_f...#no-derivation
[color=blue]
> What should be done to a class to make it derivable?[/color]

By default it is derivable.
[color=blue]
> In an abstract base class, the destructor is automatically "virtual?[/color]

No
[color=blue]
> 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?[/color]

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


tom_usenet
Guest
 
Posts: n/a
#3: Jul 22 '05

re: Derive or not to


On Wed, 28 Apr 2004 06:55:24 GMT, "bobsled" <sleding@sands.com> wrote:
[color=blue]
>Generally, what should be done to make a class not expected to be derived
>from?[/color]

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.
[color=blue]
>What should be done to a class to make it derivable?[/color]

Give it at least one virtual function, and document how that should be
overridden. You will almost always want a virtual destructor too.
[color=blue]
>In an abstract base class, the destructor is automatically "virtual?[/color]

No, you have to explicitly declare it to be virtual.
[color=blue]
>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?[/color]

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
Closed Thread