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

By submitting your information, you agree that devx.com may send you DevX offers via email, phone and text message, as well as email offers about other products and services that DevX believes may be of interest to you. DevX will process your information in accordance with the Quinstreet Privacy Policy.


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

WEBINAR:

On-Demand

Application Security Testing: An Integral Part of DevOps


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
×
We have made updates to our Privacy Policy to reflect the implementation of the General Data Protection Regulation.
Thanks for your registration, follow us on our social networks to keep up-to-date