Login | Register   
LinkedIn
Google+
Twitter
RSS Feed
Download our iPhone app
TODAY'S HEADLINES  |   ARTICLE ARCHIVE  |   FORUMS  |   TIP BANK
Browse DevX
Sign up for e-mail newsletters from DevX


Tip of the Day
Home » Tip Bank » C++
Language: C++
Expertise: Intermediate
Sep 13, 2004

Disable Inheritance

Use this code to disable inheritance:

class A;

class Lock {
 friend class A;
private:
 Lock() {}
};

class A :  virtual public Lock {
  // ...
public:
 A()
 {}
 A(int t)
 {}

};
Now, if you try to derive any other class from class A, then you'll receive a compiler error.

class B : public A
{}; // Lock::Lock' : cannot access private member declared in class 'Lock'
Here's the logic behind this: the invocation of a virtual base ctor of a object is the responsibility of the most derived class. Therefore, if you try to derive B from A then the responsibility of invoking the virtual class ctor (i.e. of ctor of Lock is private and class B is not the friend of class Lock.

If you remove the virtual keyword from the derivation list of class A, this program will compile successfully. This is because in non-virtual inheritance, any class can invoke the ctor of only its immediate class. Thus, in the non-virtual inheritance, B would invoke the ctor of its immediate class A and A would invoke the ctor of its immediate class Lock.

Saurabh Ramya
 
Comment and Contribute

 

 

 

 

 


(Maximum characters: 1200). You have 1200 characters left.

 

 

Sitemap
Thanks for your registration, follow us on our social networks to keep up-to-date