Access Modifiers
Access Modifiers वो keywords हैं, जो class के data और methods की visibility और access-level को control करते हैं, जिससे program में data सुरक्षित रहे और केवल authorized code ही उसे access कर सके।
Table of Contents
ToggleImportance of Access Modifiers
(Access Modifiers क्यों ज़रूरी हैं?)
- Data Security : Sensitive data जैसे password, balance, PIN को unauthorized access से बचाते हैं।
- Encapsulation Implementation : Data + methods को एक सुरक्षित boundary में रखते हैं।
- Controlled Access : हम easily decide कर सकते हैं कि कौन-सा variable या function public हो और कौन hidden।
- Avoid Misuse : Wrong code द्वारा डेटा manipulate होने या method incorrectly call होने से बचाते हैं।
- Abstraction Support : Internal logic को hide करके केवल necessary interface show करते हैं।
- Clean Code Architecture : Public में सिर्फ वही features रखे जाते हैं जिनकी बाहर जरूरत होती है, जबकि बाकी functionality private या protected रखकर code को simple और well-organized बनाया जाता है।
- Error Reduction : गलत जगह से data change होने या unwanted call होने की संभावना कम होती है।
- Safe Inheritance : Protected members से parent-child classes में controlled sharing possible होता है।
- Maintainability Improve : Data hidden होने से future में program modify करना आसान हो जाता है।
- Important in Library/API Development : External users को सिर्फ public methods दिए जाते हैं, internal methods private रहते हैं।
Types of Access Modifiers
Most common access modifiers:
- Public
- Private
- Protected
1. Public Access Modifier
Public Access Modifier वह keyword है, जिसकी help से declare किए गए variables और methods को program के किसी भी part से access किया जा सकता है — चाहे same class, different class या कोई object ही क्यों न हो।
Key Point –
- public members को पूरे program में कहीं से भी access किया जा सकता है।
- यह OOP का सबसे कम restriction वाला (least restrictive) access modifier है।
- Public members हमेशा globally accessible माने जाते हैं।
- जिन methods/functions को दूसरी classes या external users को call करना होता है, उन्हें आमतौर पर public रखा जाता है।
- Public access में data hiding नहीं होती, इसलिए sensitive या important data को public बनाना सही नहीं है।
- Public members को class के object के through direct call किया जा सकता है।
Syntax (C++)
class ClassName {
public:
// public data members
int x;
// public methods
void show() {
// code
}
};
C++ Example
#include <iostream>
using namespace std;
class Student {
public:
string name; // public data member
void display() { // public method
cout << “Name: ” << name << endl;
}
};
int main() {
Student s1; // object create
s1.name = “Amit”; // public: direct access
s1.display(); // public: method call
return 0;
}
Explanation
Public का use इसलिए किया गया है जिससे class के members को object के बाहर से आसानी से access और use किया जा सके।
2. Private Access Modifier
Private Access Modifier वह keyword है, जिसके अंदर declared variables और methods सिर्फ उसी class के अंदर accessible होते हैं। Class के बाहर, even object के द्वारा भी इन्हें directly access नहीं किया जा सकता।
Key Points
- private members सिर्फ उसी class के अंदर accessible होते हैं।
- Class के बाहर से इनको direct access करना allowed नहीं है।
- Object भी private data को directly access नहीं कर सकता।
- Private का मुख्य उद्देश्य data hiding और security को ensure करना है।
- Sensitive information जैसे balance, password, PIN आदि हमेशा private रखी जाती है।
- Private members को access करने के लिए public methods जैसे getters/setters use किए जाते हैं।
- यह concept Encapsulation का core हिस्सा माना जाता है।
Syntax
class ClassName {
private:
int x; // private data member
void show() {
// private method
}
};
Example
#include <iostream>
using namespace std;
class Student {
private:
int marks; // private member
public:
void setMarks(int m) {
marks = m;
}
void showMarks() {
cout << “Marks: ” << marks << endl;
}
};
int main() {
Student s;
// s.marks = 90; // Not allowed (private)
s.setMarks(90); // Access using public method
s.showMarks(); // Output: Marks: 90
return 0;
}
Explanation
Private इसलिए use किया गया है, marks को class के बाहर directly change न किया जा सके।
3. Protected Access Modifier
Protected एक ऐसा access modifier है, जिसमें data members और methods को class के अंदर, उसकी derived (child) classes में, और same package के अंदर access किया जा सकता है। लेकिन इनको class के बाहर directly access नहीं किया जा सकता।
Key Point –
- Protected members सिर्फ class के अंदर access किए जा सकते हैं।
- इन्हें derived (child) classes भी बिना किसी restriction access कर सकती हैं।
- Class के बाहर इन members को direct access नहीं मिलता।
- यह Inheritance में secure data sharing के लिए उपयोग होता है।
- Protected की accessibility private से ज़्यादा, लेकिन public से कम होती है।
Syntax
protected returnType methodName() {
// method body
}
Example
#include <iostream>
using namespace std;
class Student {
protected:
int marks; // Protected member
};
// Child class (Derived)
class Result : public Student {
public:
void setMarks(int m) {
marks = m; // Allowed (protected → accessible in child)
}
void showMarks() {
cout << “Marks: ” << marks << endl;
}
};
int main() {
Result r;
r.setMarks(90); // public method → allowed
r.showMarks();
// r.marks = 90; Not allowed (protected member)
}
Explanation
- Student class में
marksको protected रखा गया है। - Result class, Student से inherit हो रही है।
setMarks()method public है, इसलिए main() से marks set किया जा सकता है, लेकिन directly marks variable नहीं।showMarks()method public है, जो protected data (marks) को display करता है।- main() में
r.marks = 90;नहीं कर सकते — क्योंकि protected है।
Advantages of Access Modifiers
1. Data Security / Safety
- Sensitive data जैसे password, PIN, bank balance को unauthorized access से बचाते हैं।
- Private और protected modifiers यह सुनिश्चित करते हैं, कि data misuse न हो।
2. Encapsulation Support
- Class के data और methods को logically group करके hide करना आसान होता है।
- Internal implementation को बाहर से छुपाया जा सकता है।
3. Controlled Access
- Public, private और protected की मदद से developer तय कर सकता है, कि कौन access कर पाए।
- Data access methods जैसे getter/setter के माध्यम से ही कराया जा सकता है।
4. Safe Inheritance
- Protected members child classes के लिए accessible रहते हैं, लेकिन बाहर नहीं।
- Code reuse और inheritance control संभव होता है।
5. Clean Code / Better Architecture
- Public में सिर्फ necessary features रखें।
- बाकी members private/protected रखें, ताकि program structured और maintainable रहे।
6. Error Reduction
Unwanted access से bugs और errors कम होते हैं।
Disadvantages of Access Modifiers
1. Overhead in Code Writing
Getter और setter methods लिखने से code थोड़ा लंबा हो जाता है।
2. Complexity for Beginners
Access rules समझने में नए learners के लिए थोड़ी confusion हो सकती है।
3. Performance Impact (Minor)
Extra methods (getter/setter) call करने से negligible performance effect हो सकता है।
4. Limited Flexibility
Private members को सीधे access नहीं कर सकते → कभी-कभी testing में extra effort लगता है।
Difference Between Private, Protected, and Public
| Feature / Modifier | Private | Protected | Public |
|---|---|---|---|
| Access inside class | Yes — accessible | Yes — accessible | Yes — accessible |
| Access in derived class | No — not accessible | Yes — accessible | Yes — accessible |
| Access in same package/module | No | Yes (C++ में inheritance scope में) | Yes |
| Access outside class/object | No | No | Yes |
| Visibility / Scope | Most restricted | Medium restricted | Least restricted / fully visible |
| Typical Use-Case | Sensitive data (password, balance) | Data sharing with child classes (marks, ID) | Public interface, general methods/data |
| Encapsulation Support | Strong | Medium | Weak |
| Direct object access | Not allowed | Not allowed | Allowed |
| Access via Methods | Yes (getter/setter) | Yes (via child class or public method) | Yes (direct or method) |
| Security Level | High | Medium | Low |
| Inheritance Behavior | Not inherited / inaccessible | Inherited & accessible in derived class | Inherited & accessible |
| Examples | Bank balance, Password, PIN | Student marks, Parent class variables | Name, ID, public functions |




