Login | Register   
RSS Feed
Download our iPhone app
Browse DevX
Sign up for e-mail newsletters from DevX

Tip of the Day
Home » Tip Bank » C++
Language: C++
Expertise: Advanced
Sep 4, 2001



Virtual Base Classes Must Have a Default Constructor

Virtual inheritance imposes several restrictions. One of them is that you cannot use a class that has no default constructor as a virtual base class. Consider the following program:
struct A
 A(int n) {} // no default ctor
struct B: public virtual A // virtual inheritance
 B(): A(5) {}
struct C: public B
int main()
 C c; //compilation error: "Cannot find default constructor
      //to initialize base class 'A'."

Had we used plain inheritance instead of virtual inheritance, this program would compile without a hitch. Why does C++ mandate that a virtual base class have a default constructor? The problem is that only a single instance of a virtual base class exists in a hierarchy. If A served as a virtual base of several classes, each of which passing a different argument to A's constructor, the compiler wouldn't know which argument list to choose. This problem doesn't exist with non-virtual base classes because there may be multiple instances of the base subobject in this case.
Danny Kalev
Comment and Contribute






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



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