C++ Tutorial Index

C++ Tutorial C++ History C++ Installation C++ First Program C++ cin and cout C++ Data type C++ Variable C++ operator C++ Keywords

C++ Control Statements

C++ If C++ Nested if C++ If-else C++ If-else-if C++ Switch C++ Break C++ Continue C++ Goto C++ For loop C++ While loop C++ Do while loop

C++ Functions

C++ Call by Value C++ Call by Reference C++ Recursion Function C++ Inline function C++ Friend function

C++ Arrays

Single dimension array Two dimension array

C++ Strings

C++ Strings

C++ Inheritance

C++ Inheritance Single level Inheritance Multilevel Inheritance Multiple Inheritance Hierarchical Inheritance Hybrid Inheritance

C++ Polymorphism

C++ Polymorphism C++ Overloading C++ Overriding C++ Virtual Function

C++ Pointers

C++ Pointers C++ this pointer

C++ Exception Handling

C++ Exception Handling

C++ Constructors

C++ Constructors Default Constructor Parameterize Constructor Copy constructor Constructor Overloading Destructor

C++ File Handling

C++ File Handling C++ Writing to file C++ Reading file C++ Close file

Miscellaneous

C Vs C++ C++ Comments C++ Data Abstraction C++ Identifier C++ Memory Management C++ Storage Classes C++ Void Pointer C++ Array To Function C++ Expressions C++ Features C++ Interfaces C++ Encapsulation std::min in C++ External merge sort in C++ Remove duplicates from sorted array in C++ Precision of floating point numbers Using these functions floor(), ceil(), trunc(), round() and setprecision() in C++ C++ References C++ Friend Functions C++ Mutable keyword Unary Operators in C++ Initialize Array of objects with parameterized constructors in C++ Differences between #define & const in C/C++ C++ Program to Implement Shell Sort C++ Program to Implement Merge Sort Storage Classes in C Vector resize() in C++ Passing by Reference Vs. Passing by the pointer in C++ Free vs delete() in C++ goto statement in C and C++ C++ program to read string using cin.getline() C++ String Concatenation Heap Sort in C++ Swap numbers in C++ Input Iterators in C++ Fibonacci Series in C++ C ++ Program: Alphabet Triangle and Number Triangle C++ Program: Matrix Multiplication C++ Program to Print Fibonacci Triangle Stack in C++ Maps in C++ Queue in C++ C++ Bitset C++ Algorithms Priority Queue in C++ C++ Multimap C++ Deque Function Pointer in C++ Sizeof() Operators in C++ C++ array of Pointers free() Vs delete in C Timsort Implementation Using C++ CPP Templates C++ Aggregation C++ Enumeration C++ Math Functions C++ Object Class C++ Queue Initialize Vector in C++ Vector in C++ C++ STL Components Function overloading in C++ C++ Maximum Index Problem C++ find missing in the second array C++ Program to find the product array puzzle C++ Program To Find Largest Subarray With 0 Sum C++ Program To Move All Zeros To The End Of The Array C++ Program to find the element that occurs once C++ Program to find the largest number formed from an array Constructor Vs Destructor C++ Namespaces C++ OOPs Concept C++ Static C++ Structs C++ Try-Catch C++ User Defined Exceptions C++ Virtual Destructor C++ vs C# Malloc() and new in C++ Palindrome Number Program in C++ Snake Code in C++ Splitting a string in C++ Structure Vs Class in C++ Virtual Function Vs Pure Virtual Function C++ Bidirectional Iterators C++ Forward Iterators C++ Iterators C++ Output Iterators C++ Range-based For Loop Converting string into integer in C++ LCM Program in C++ Type conversion in C++ Add two numbers using the function in C++ Advantage and disadvantage friend function C++ Armstrong Number Program in C++ ATM machine program in C++ using functions Binary to Decimal in C++ Bit Manipulation in C++ C++ Constructor C++ Dijkstra Algorithm Using the Priority Queue C++ int into String C++ Signal Handling Decimal to Binary in C++ Decimal to Hexadecimal in C++ Decimal to Octal in C++ Factorial Program in C++ Function in C++ Hexadecimal to Decimal in C++ Octal to Decimal in C++ Reverse a Number in C++ Structure Vs Class in C++ C++ Forward Iterators C++ Output Iterators C++ Prime number program Char Array to String in C++ Constructor Overloading in C++ Default arguments in C++ Different Ways to Compare Strings in C++ Dynamic Binding in C++ Program to convert infix to postfix expression in C++ SET Data Structure in C++ Upcasting and Downcasting in C++ Reverse an Array in C++ Fast Input and Output in C++ Delete Operator in C++ Copy elision in C++ C++ Date and Time C++ Bitwise XOR Operator Array of sets in C++ Binary Operator Overloading in C++ Binary Search in C++ Implementing the sets without C++ STL containers Scope Resolution Operator in C++ Smart pointers in C++ Types of polymorphism in C++ Exception Handling in C++ vs Java Const Keyword in C++ Type Casting in C++ Static keyword in C++ vs Java Inheritance in C++ vs Java How to concatenate two strings in C++ Programs to Print Pyramid Patterns in C++ swap() function in C++ Structure of C++ Program Stringstream in C++ and its applications rand() and srand() in C / C++ C++ Ternary Operator C++ Scope of Variables While Loop Examples in C++ Star pattern in C++ using For Loops For Loop Examples in C++ Do-While Loop Examples in C++ Top 5 IDEs for C++ That You Should Try Once Assertions in C/C++ C++ Convert Int to String Continue in C++ While loop Diamond Pattern in C++ using For Loop How to Reverse a String in C++ using Do-While Loop How to Reverse a String in C++ using For Loop How to Reverse a String in C++ using While Loop Infinite loop in C++ Loops in C++ Returning Multiple Values from a Function using Tuple and Pair in C++ wcscpy(), wcslen(), wcscmp() Functions in C++ Auto keyword in C++ C++ 11 vs C++ 14 vs C++ 17 C++ STL (Standard Template Library) Differences Between C Structures and C++ Structures Divide by Zero Exception in C++ Dynamic Constructor in C++ Dynamic Memory Allocation in C++ Find the Size of Array in C/C++ without using sizeof() function Floating Point Operations and Associativity in C, C++ and Java Hello World Program in C++ How to create a table in C++ How to Setup Environment for C++ Programming on Mac Implementation of a Falling Matrix in C++ Message Passing in C++ Pointer to Object in C++ Templates in C++ vs Generics in Java Ways to Copy a Vector in C++ What does Buffer Flush mean in C++ sort() function in C++ Structure Sorting (By Multiple Rules) in C++ Similarities between C++ and Java std::distance in C++

C++ Encapsulation

The following two essential components are present in all C++ programmes:

  • Functions are the parts of a programme that perform actions, and they are termed programme statements (code).
  • Program data is the program's information that is influenced by the program's functions.

What do you mean by Encapsulation?

Data encapsulation is the act of combining data with the functions or procedures that operate on it to create a single unit that is shielded from outside intervention and misuse.

This is a crucial notion in object-oriented programming, and it leads to another OOP concept known as "data hiding." Abstraction exposes just the essential information or interfaces to the outside world, whereas encapsulation hides data and its members.

In a sense, abstraction shows the outer world a "abstract image" of the concealed facts. As a result, we've already established that encapsulation and abstraction are mutually exclusive.

C++ Encapsulation

Encapsulation is represented by a class in C++, which has data members and methods that operate on them, as well as access specifiers such as private, public, and protected.

We also know that class members are private by default. We are genuinely establishing encapsulation when we define class members as private and methods to access class members as public. At the same time, we provide the outside world with an abstract view of data in the form of public methods.

C++ Encapsulation

Encapsulation Implementation

Encapsulation is implemented in C++ as a class that encapsulates data and the methods that operate on it. Data is typically designated as private so that it cannot be accessed outside of the class. The public methods or functions are defined and may be accessed using the class's object.

However, we are unable to directly access private members, which is referred to as data masking. Data is secured and can only be accessed by functions of the class in which it is declared when this is done.

For example,

// Example program
#include <iostream>
#include <string>
using namespace std;
//example class to demonstrate encapsulation
class sampleData{
   int num;
   char ch;
   
   public:
   //getter methods to read data values
   int getInt() const{
      return num;
   }
  
   char getCh() const{
      return ch;
   }
   
   //setter methods to set data values
   void setInt(int num) {
      this->num = num;
   }
  
   void setCh(char ch){
      this->ch = ch;
   }
};
int main()
{
   sampleData s;
   s.setInt(100);
   s.setCh('Z');
   cout<<"num = "<<s.getInt()<<endl;
   cout<<"ch = "<<s.getCh();
  
   return 0;
}

Output

num = 100
ch = Z 

We've created a class out of two member variables and the getter and setter methods in the previous example. This is an illustration of encapsulation.

We've defined two variables, num and ch, as private variables, making them inaccessible to the rest of the programme. They are only available to the public functions that we have disclosed. As a result, we have private variables in a class with concealed data members.

Creating a Strategy

Unless we have a specific need to reveal class members, most of us have learned to make them private by default. That is excellent encapsulation.

This is most commonly applied to data members, although it may be applied to any member, including virtual functions.

C++ Encapsulation

Encapsulation vs. Abstraction: What's the Difference?

Abstraction and encapsulation are inextricably linked. Encapsulation supports abstraction by grouping together data and functions that operate on that data.

EncapsulationAbstraction
The data is hidden.Implementation is hidden.
Combines data and procedures in a single package.Provides a user with an abstract interface that only shows them what they need to know.
Helps with abstraction.Assists with code reuse and security.
Access specifiers define access to data members and methods and are implemented as a class.Implemented as an abstract class with non-instantiable interfaces.

Access specifiers' role in encapsulation

As we saw in the last example, access specifiers are crucial in the implementation of encapsulation in C++. The implementation of encapsulation may be broken down into two steps:

  • Using the private access specifiers, the data members should be identified as private.
  • The public access specifier should be used to designate the member function that manipulates the data members.

What is the purpose of encapsulation?

  • Encapsulation in C++ allows us to group together relevant data and methods, making our code clearer and easier to read.
  • It aids in the management of our data members' modifications.

Consider the case when we want a class's length field to be non-negative. We can now make the length variable private and use the logic within the setAge function (). As an example,

class Rectangle {
  private:
    int age;


  public:
    void setLength(int len) {
      if (len >= 0)
        length = len;
    }
};
  • The getter and setter methods provide our class members read-only or write-only access. As an example,
getLength()  // provides read-only access
setLength()  // provides write-only access
  • It aids in the decoupling of system components. We can, for example, divide code into numerous bundles.
    Decoupled components (bundles) can be produced, tested, and debugged separately and simultaneously. And any modifications to one component have no bearing on the other components.
  • Encapsulation can also be used to conceal data. If we alter the length and breadth variables in Example 1 to private or protected, access to these fields is limited.
    They are also kept secret from the upper classes. This is known as data obfuscation.

Conclusion

One of the most significant properties of OOP is encapsulation, which allows us to conceal data. As a result, data is more secure and protected from unwanted usage.

Encapsulation supports abstraction by allowing us to offer only the appropriate interface to the end-user while hiding all other features.



ADVERTISEMENT
ADVERTISEMENT