When you plan to design a Class for which you feel that it should not be inherited further by any other class then...Here is a tip : Use of Virtual Private Inheritance
Here Derived class cannot be inherited by any other class.But when our client class tries to inherit we get a Error :
In constructor `Client::Client()':
error: `Base::Base()' is protected
The reason is simple when ever you inherit a class virtually then you should call the constructor of Base explicity on good design.
Code:
#include <iostream>
using namespace std;
class Base
{
protected:
Base()
{
cout<<"Base::Base"<<endl;
}
};
class Dervied : virtual private Base
{
public:
Dervied()
{
cout<<"Dervied::Dervied"<<endl;
}
};
class Client : public Dervied
{
public:
Client()
{
cout<<"Client::Client"<<endl;
}
};
int main(void)
{
Client c;
return 0;
}
In constructor `Client::Client()':
error: `Base::Base()' is protected
The reason is simple when ever you inherit a class virtually then you should call the constructor of Base explicity on good design.

