What is the main difference between a class and a struct in C++?
Table of Contents
Introduction
In C++, both class
and struct
are used to define custom data types that can encapsulate data and functions. While they are similar in many ways, especially compared to C, the key difference between them lies in how they handle access control. This distinction affects how data and functions within class
and struct
are used and exposed in C++ programs.
This guide explains the main differences between class
and struct
in C++ and highlights when you should use one over the other.
Difference Between Class and Struct in C++
1. Access Control (Default Visibility)
The most significant difference between class
and struct
in C++ is how they handle access control by default.
-
Class: In a
class
, members are private by default. This means that unless specified otherwise, member variables and functions cannot be accessed outside the class.Example:
-
Struct: In a
struct
, members are public by default. This means that data and functions can be accessed directly unless explicitly marked as private or protected.Example:
Practical Use:
- Use class when you want encapsulation to control access to data, enforcing good design principles.
- Use struct for POD (Plain Old Data) structures where encapsulation is less critical.
2. Inheritance Default Access
Another distinction arises in inheritance. When inheriting from a base class or struct, the default access level differs based on whether you're using a class
or a struct
.
-
Class: In a
class
, inheritance is private by default. This means that base class members are inherited privately unless explicitly marked aspublic
orprotected
.Example:
-
Struct: In a
struct
, inheritance is public by default. This means that base class members are inherited publicly, allowing access to the derived class members unless marked otherwise.Example:
Practical Use:
- Use class for inheritance where you want to limit access to base class members.
- Use struct when you want a simple public inheritance.
3. Encapsulation and Design Intent
- Class: In C++, the
class
keyword is generally used when implementing object-oriented designs. It emphasizes encapsulation by default, keeping member variables private and exposing only necessary functions (getters/setters, public methods) to interact with an object. - Struct: The
struct
keyword is commonly used when creating data structures where direct access to member variables is intended. While you can also add functions to astruct
in C++, the use ofstruct
typically suggests a simpler, more transparent design where encapsulation is not a priority.
Practical Examples
Example 1: Using a Class for Encapsulation
In this example, encapsulation is enforced by making width
and height
private, and only the public methods setDimensions
and area
are exposed.
Example 2: Using a Struct for Simple Data Structures
Here, the struct
is used for a simple data structure, and member variables are accessed directly without encapsulation.
Conclusion
In C++, the main difference between class
and struct
lies in their default access control and inheritance behavior. In a class
, members are private by default, making it ideal for encapsulation in object-oriented design. In contrast, a struct
defaults to public members and is commonly used for simpler, data-focused structures. Choosing between class
and struct
depends on whether you prioritize encapsulation and inheritance or require a straightforward, transparent data container.