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: 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.

 

 

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