devxlogo

Disable Inheritance

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.

See also  Professionalism Starts in Your Inbox: Keys to Presenting Your Best Self in Email
devxblackblue

About Our Editorial Process

At DevX, we’re dedicated to tech entrepreneurship. Our team closely follows industry shifts, new products, AI breakthroughs, technology trends, and funding announcements. Articles undergo thorough editing to ensure accuracy and clarity, reflecting DevX’s style and supporting entrepreneurs in the tech sphere.

See our full editorial policy.

About Our Journalist