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
Language: C++
Expertise: Intermediate
Jun 4, 1999

Accessing a C++ Object in C Code: The Memory Layout of Derived Objects

The Standard does not specify the memory layout of base class subobjects in a derived class. In practice, however, all C++ compilers use the same convention: The base class subobject appears first (in left-to-right order in case of multiple inheritance), and data members of the derived class follow. C code can access derived objects, as long as the derived class abides by the same restrictions that were specified in the Tip "Accessing a C++ Object in C Code." For example, consider a non-polymorphic class that inherits from Date (the declaration of Date is repeated here for convenience) and has additional data members:

 
class Date
{
public:
  int day;
  int month;
  int year;
  Date(); //current date
  ~Date();
  bool isLeap() const;
  bool operator == (const Date& other);
};

class DateTime: public Date
{
public:  
  long time; //additional members
  char AM // AM or PM?
  DateTime();
  ~DateTime();
  long getTime() const;
};

The two additional data members of DateTime, namely 'time' and 'AM', are appended after the three members of the base class Date, so the memory layout of a DateTime object is equivalent to this C struct:

 
struct POD_DateTime
{
  int day;
  int month;
  int year;
  long time
  char AM;
};

As with class Date, the non-polymorphic member functions of DateTime have no effect on the size or memory layout of the object.

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