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.