Welcome! Today's subject is Encapsulation, a cornerstone of Object-Oriented Programming (OOP) in C++. Encapsulation is the process of bundling data and the operations that modify them into one unit — commonly an object — thereby protecting the data from unwanted alterations. This level of data protection ensures the creation of robust and maintainable software.
Prepare yourself for an exciting journey as we delve into how encapsulation functions in C++ and explore the critical role it plays in safeguarding data privacy.
Starting with the basics, encapsulation involves wrapping data and the methods that modify this data into a single compartment known as a class
. It protects the internal state of an object from undesired external interference.
To illustrate, consider a C++ class representing a bank account. Without encapsulation, the account balance could be directly altered. With encapsulation, however, the balance can only change through specified methods such as deposit
or withdraw
.
Encapsulation restricts direct access to an object's data and prevents unwanted data alteration. This principle is comparable to window blinds, allowing you to look out while preventing others from peeping in.
In C++, encapsulation is achieved through access specifiers like private
and public
. By default, class members are private
, restricting direct access. Data intended to be hidden from outside manipulation is placed under the private
access specifier, while public
members are accessible.
Consider a class Person
with a private attribute name
.
In this example, name
is private, and getName()
enables us to access it safely.
While encapsulating, C++ uses getter and setter methods to access or modify private attributes. A getter method retrieves an attribute's value, while a setter alters it. Let's illustrate this:
Here, setName()
and getName()
serve as the setter and getter methods, respectively, for the private attribute name
.
Let's apply the principle of encapsulation to our BankAccount
class, which includes private attributes like account number and balance, along with public methods for withdrawals, deposits, and balance checks.
In the above code, the BankAccount
class encapsulates account details, while the public methods manage the balance in a controlled manner.
In larger projects, it's common practice in C++ to separate class declarations and implementations into different files: a header file (.hpp
) and a source file (.cpp
). This separation improves code organization and maintainability.
Let's revisit the BankAccount
class using this approach:
BankAccount.hpp
BankAccount.cpp
By using separate files, you define your class interface in the header file and implement its functionality in the corresponding source file. This method helps manage complex projects by making your code more modular and easier to navigate.
