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.