Accessing a C++ Object in C Code: Different Access Specifiers

Accessing a C++ Object in C Code: Different Access Specifiers

The fourth restriction on the legality of accessing C++ objects from C code states that all the data members of the class must be declared without an intervening access specifier. This means, theoretically, that the memory layout of a class that looks similar to this example might differ from a class that has the same data members, which are declared in the same order, albeit without any intervening access specifiers:

 class AnotherDate  // has intervening access specifiers{  private:  int day;private:  int month;private:  int year;public:  //constructor and destructor  AnotherDate(); //current date  ~AnotherDate();  //a non-virtual member function  bool isLeap() const;  bool operator == (const Date& other);};

In other words, for class AnotherDate, an implementation is allowed to place the member ‘month’ before the member ‘day’, ‘year’ before ‘month’, or whatever. Of course, this nullifies any compatibility with a C struct. However, in practice, all current C++ compilers ignore the access specifiers and store the data members in the order of declaration. So C code that accesses a class object that has multiple access specifiers should work, but there is no guarantee that the compatibility will remain in the future.

See also  How College Students Can Shape the Future of Tech Responsibility

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