Overview of OOP Principles: Encapsulation, Inheritance, Polymorphism, and Abstraction in C++


Object-Oriented Programming (OOP) is a programming paradigm centered around objects, which combine data and methods to manipulate that data. C++ is a powerful language that supports OOP through four main principles: Encapsulation, Inheritance, Polymorphism, and Abstraction.

1. Encapsulation

Encapsulation involves bundling data and the methods that operate on the data into a single unit, typically a class. Access to this data is restricted through access specifiers such as private, protected, and public.

Example:

    #include <iostream>

    class Car {
    private:
        std::string brand;
        int speed;

    public:
        void setBrand(const std::string &b) {
            brand = b;
        }

        void setSpeed(int s) {
            if (s > 0) {
                speed = s;
            }
        }

        void display() {
            std::cout << "Brand: " << brand << ", Speed: " << speed << " km/h" << std::endl;
        }
    };

    int main() {
        Car car;
        car.setBrand("Toyota");
        car.setSpeed(120);
        car.display();
        return 0;
    }
        

2. Inheritance

Inheritance allows a class (child class) to inherit attributes and methods from another class (parent class). It promotes code reusability.

Example:

    #include <iostream>

    class Vehicle {
    public:
        void move() {
            std::cout << "This vehicle moves." << std::endl;
        }
    };

    class Car : public Vehicle {
    public:
        void honk() {
            std::cout << "Car honks: Beep! Beep!" << std::endl;
        }
    };

    int main() {
        Car car;
        car.move();
        car.honk();
        return 0;
    }
        

3. Polymorphism

Polymorphism allows objects to be treated as instances of their parent class, enabling a single interface to represent different data types. It is achieved using function overloading or overriding.

Example:

    #include <iostream>

    class Animal {
    public:
        virtual void sound() {
            std::cout << "Animal makes a sound." << std::endl;
        }
    };

    class Dog : public Animal {
    public:
        void sound() override {
            std::cout << "Dog barks: Woof! Woof!" << std::endl;
        }
    };

    class Cat : public Animal {
    public:
        void sound() override {
            std::cout << "Cat meows: Meow!" << std::endl;
        }
    };

    int main() {
        Animal *a1 = new Dog();
        Animal *a2 = new Cat();

        a1->sound();
        a2->sound();

        delete a1;
        delete a2;

        return 0;
    }
        

4. Abstraction

Abstraction involves hiding implementation details and showing only the essential features of an object. Abstract classes or interfaces are used to achieve abstraction.

Example:

    #include <iostream>

    class Shape {
    public:
        virtual void draw() = 0; // Pure virtual function
    };

    class Circle : public Shape {
    public:
        void draw() override {
            std::cout << "Drawing a Circle." << std::endl;
        }
    };

    class Rectangle : public Shape {
    public:
        void draw() override {
            std::cout << "Drawing a Rectangle." << std::endl;
        }
    };

    int main() {
        Shape *shape1 = new Circle();
        Shape *shape2 = new Rectangle();

        shape1->draw();
        shape2->draw();

        delete shape1;
        delete shape2;

        return 0;
    }
        

These examples demonstrate how C++ enables developers to implement OOP principles effectively, promoting modular, reusable, and maintainable code.





Advertisement