You are here:

C++/Is there a superclass object created when creating a subclass object?



With the following snippet, how many objects of type A are created? I know for sure there is one in line #4, but is there another object of type A created in line #5 as well? The reason why I am asking this is because when the compiler constructs a subclass, it will call superclass constructor first.

Thanks, lzzzz
class A {};

class B : public A {};

int main() {
A a = new A(); // line #4
B b = new B(); // line #5

The short answer is: Yes.

Remember a B is an A.

In fact the A in the B at line #5 is referred to in the standard as a sub-object - it is not an object in its own right - as is the A in line #4, but is part of b.

Also note that a member of type A is also a sub-object of instances of types it is a member of, for example:

       class C
       // ...
         A        m_a;

When you create a C object then an A object is also created for the member m_a, which is a sub-object of the C instance, and again the A constructor will be called before the constructor for C (but after constructors for base classes, of which there are none in this simple example).  


All Answers

Answers by Expert:

Ask Experts


Ralph McArdell


I am a software developer with more than 15 years C++ experience and over 25 years experience developing a wide variety of applications for Windows NT/2000/XP, UNIX, Linux and other platforms. I can help with basic to advanced C++, C (although I do not write just-C much if at all these days so maybe ask in the C section about purely C matters), software development and many platform specific and system development problems.


My career started in the mid 1980s working as a batch process operator for the now defunct Inner London Education Authority, working on Prime mini computers. I then moved into the role of Programmer / Analyst, also on the Primes, then into technical support and finally into the micro computing section, using a variety of 16 and 8 bit machines. Following the demise of the ILEA I worked for a small company, now gone, called Hodos. I worked on a part task train simulator using C and the Intel DVI (Digital Video Interactive) - the hardware based predecessor to Indeo. Other projects included a CGI based train simulator (different goals to the first), and various other projects in C and Visual Basic (er, version 1 that is). When Hodos went into receivership I went freelance and finally managed to start working in C++. I initially had contracts working on train simulators (surprise) and multimedia - I worked on many of the Dorling Kindersley CD-ROM titles and wrote the screensaver games for the Wallace and Gromit Cracking Animator CD. My more recent contracts have been more traditionally IT based, working predominately in C++ on MS Windows NT, 2000. XP, Linux and UN*X. These projects have had wide ranging additional skill sets including system analysis and design, databases and SQL in various guises, C#, client server and remoting, cross porting applications between platforms and various client development processes. I have an interest in the development of the C++ core language and libraries and try to keep up with at least some of the papers on the ISO C++ Standard Committee site at


©2017 All rights reserved.