struct vs class in C++
Maybe I should apologize for going on about C++ yet again, but, following on from the recent online lecture series that I conducted, I learned that there is a lot of interest in the topic. I also found the experience a very fruitful source of ideas, inspiration and queries – much of this will appear here.
During the lectures, I would periodically pose a question, which the attendees could answer via the chat. An interesting one was: how does a struct differ from a class in C++? …
I will start by defining a struct in C. I would see it as a customized, composite data type, which may be constructed from the existing built-in data types [int, char, etc.], bit fields [integers of specified bit size] and other structs. This example shows a simple example of a struct definition, along with the declaration of a variable of that type and access to one of the fields. A struct is a handy and flexible way to represent data. Similar facilities exist in most modern programming languages.
How does a C++ class differ from a C struct? There are a few differences. The key ones are:
- A class can also contain functions [called methods].
- The member variables and methods are hidden from the outside world, unless their declaration follows a public label.
- There can be a pair of special methods – the constructor and destructor – that are run automatically when an instance of the class [an object] is created and destroyed.
- Operators to work on the new data type can be defined using special methods [member functions].
- One class can be used as the basis for the definition of another [inheritance].
- Declaring a variable of the new type [an instance of the class; an object] requires just the name of the class – the keyword class is not required.
Most of these are illustrated in the example here.
But what about a struct in C++? The last example here gives a clue. The only difference between a struct and class in C++ is the default accessibility of member variables and methods. In a struct they are public; in a class they are private.
Having imparted this information, I urge you not to exploit it too heavily. A key priority when you are writing code is to ensure that it is readable [=maintainable]. Somebody – it could be you – might need to look at this code in a year’s time and understand what it does. I have heard advice as follows: Assume that the person that will maintain your code is an armed psychopath, who has limited patience and knows your home address.
Posted June 2nd, 2014, by Colin Walls
- What size drink would you like?
- Using an embedded Web server
- Row 13 – unlucky for some?
- Brillo – a brilliant OS or a scouring pad?
- How Mac and I are getting along – an interim report
- IPv6 – some guidance to the uninitiated
- Power outlets when traveling – and USB again
- Spotting the difference – subtleties of C code
- Shutting the Windows – moving to a Mac?
- DAC and Embedded TechCon – embedded and EDA coming together?