Access specifiers control who can see and use parts of your code. They help keep things safe and organized.
Access specifiers in C++
class ClassName { public: // accessible from anywhere protected: // accessible in this class and derived classes private: // accessible only in this class };
public: means anyone can use these parts.
protected: means only this class and its children can use these parts.
private: means only this class can use these parts.
length is public, so anyone can access it.class Box { public: int length; };
width is private, so only Box can use it.class Box { private: int width; };
height is protected, so Box and its children can use it.class Box { protected: int height; };
This program shows how speed is private and cannot be changed directly. Instead, we use public functions to set and show the speed.
#include <iostream> using namespace std; class Car { private: int speed; public: void setSpeed(int s) { speed = s; } void showSpeed() { cout << "Speed: " << speed << " km/h" << endl; } }; int main() { Car myCar; // myCar.speed = 100; // Error: speed is private myCar.setSpeed(100); myCar.showSpeed(); return 0; }
Private members cannot be accessed outside the class directly.
Protected members are useful when you want child classes to access some data but keep it hidden from others.
Public members are open to everyone, so use them carefully.
Access specifiers control who can use parts of a class.
Use private to hide details inside a class.
Use public to allow outside access.
Use protected to allow access in child classes.
Practice
Solution
Step 1: Understand access specifiers
Public members are accessible from any part of the program, unlike private or protected.Step 2: Compare with other specifiers
Private restricts access to inside the class only; protected allows access in derived classes.Final Answer:
public -> Option CQuick Check:
Access anywhere = public [OK]
- Confusing private with public
- Thinking protected is accessible everywhere
- Assuming internal is a C++ specifier
int age inside a class?Solution
Step 1: Recall C++ syntax for access specifiers
Access specifiers are labels followed by a colon, then members are declared below.Step 2: Identify correct syntax
private: int age; uses 'private:' followed by 'int age;' which is correct syntax.Final Answer:
private: int age; -> Option BQuick Check:
Access specifier label + colon = correct [OK]
- Placing access specifier before type
- Missing colon after access specifier
- Trying to put access specifier after variable
class Test {
private:
int x = 5;
public:
int getX() { return x; }
};
int main() {
Test t;
// std::cout << t.x << std::endl; // Line A
std::cout << t.getX() << std::endl;
return 0;
}Solution
Step 1: Understand private member access
The variable x is private, so direct access like t.x is not allowed (Line A is commented out).Step 2: Use public getter method
The method getX() is public and returns x's value, so std::cout << t.getX() prints 5.Final Answer:
5 -> Option AQuick Check:
Private hidden, public getter shows 5 [OK]
- Trying to access private variable directly
- Expecting 0 as default value
- Confusing compilation and runtime errors
class Base {
protected:
int value = 10;
};
class Derived : public Base {
public:
void show() {
std::cout << value << std::endl;
}
};
int main() {
Derived d;
d.show();
std::cout << d.value << std::endl;
return 0;
}Solution
Step 1: Check access to protected member inside Derived
Derived class can access protected members of Base, so d.show() works and prints 10.Step 2: Check access to protected member from main
Main function cannot access protected members directly via object, so std::cout << d.value causes compilation error.Final Answer:
Error: Cannot access protected member 'value' from main using object -> Option AQuick Check:
Protected accessible in subclass, not outside [OK]
- Thinking protected is public
- Assuming main can access protected members
- Missing error on direct access in main
Solution
Step 1: Determine data access for derived classes only
Protected data is hidden from outside but accessible in derived classes, fitting the requirement.Step 2: Determine function access for everyone
Functions accessible everywhere must be public.Final Answer:
Data: protected, Functions: public -> Option DQuick Check:
Protected data + public functions = correct design [OK]
- Using private data blocks derived classes
- Making functions private hides them outside
- Confusing public and protected roles
Ready to prove it?
Pass the test and this pattern moves unknown
