Access Specifiers in C++


Access specifiers in C++ define the scope and visibility of class members (variables and functions). They determine how members of a class can be accessed from other parts of the program. C++ provides three main access specifiers:

1. Public

Members declared as public are accessible from anywhere in the program.

Example:

    #include <iostream>

    class Car {
    public:
        std::string brand;

        void display() {
            std::cout << "Brand: " << brand << std::endl;
        }
    };

    int main() {
        Car car1;
        car1.brand = "Toyota";  // Accessible directly
        car1.display();         // Accessible directly

        return 0;
    }
        

Output:

    Brand: Toyota
        

2. Private

Members declared as private are accessible only within the class. They cannot be accessed directly from outside the class.

Example:

    #include <iostream>

    class Car {
    private:
        std::string brand;

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

        void display() {
            std::cout << "Brand: " << brand << std::endl;  // Accessing private member
        }
    };

    int main() {
        Car car1;
        car1.setBrand("Honda");  // Indirectly setting private member
        car1.display();

        return 0;
    }
        

Output:

    Brand: Honda
        

3. Protected

Members declared as protected are accessible within the class and its derived (child) classes but not from outside these classes.

Example:

    #include <iostream>

    class Vehicle {
    protected:
        int speed;

    public:
        void setSpeed(int s) {
            speed = s;
        }
    };

    class Car : public Vehicle {
    public:
        void displaySpeed() {
            std::cout << "Speed: " << speed << " km/h" << std::endl;  // Accessing protected member
        }
    };

    int main() {
        Car car1;
        car1.setSpeed(120);  // Accessing public method of parent class
        car1.displaySpeed();

        return 0;
    }
        

Output:

    Speed: 120 km/h
        

Comparison of Access Specifiers

Access Specifier Accessible within the Class Accessible by Derived Classes Accessible Outside the Class
Public Yes Yes Yes
Private Yes No No
Protected Yes Yes No

Access specifiers in C++ provide control over data hiding and ensure encapsulation, allowing developers to safeguard and organize their code effectively.





Advertisement