Derive or not to

  • Follow


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)


Reply: