BCA / B.Tech 11 min read

Access Specifiers in Hindi

Access Specifiers in C++ in Hindi | C++ में एक्सेस स्पेसिफायर्स हिंदी में  :

  • C++ में एक्सेस स्पेसिफायर्स (या एक्सेस मोडिफायर्स) एक महत्वपूर्ण भूमिका निभाते हैं। वे यह निर्धारित करते हैं कि किसी क्लास के सदस्यों (data members और member functions) को कहाँ और कैसे एक्सेस किया जा सकता है।
  •  एक्सेस स्पेसिफायर्स के माध्यम से, प्रोग्रामर यह नियंत्रित कर सकता है कि कौन से हिस्से बाहरी कोड (external code) द्वारा एक्सेस किए जा सकते हैं और कौन से हिस्से केवल क्लास के भीतर ही उपयोग किए जा सकते हैं।
  • C++ में एक्सेस स्पेसिफायर्स डेटा सुरक्षा और गोपनीयता को सुनिश्चित करने के लिए एक आवश्यक उपकरण हैं। ये क्लास के अंदर और बाहर डेटा के एक्सेस को नियंत्रित करते हैं। 
  • जब भी आप  C++ में प्रोग्राम लिखते हैं, तो एक्सेस स्पेसिफायर्स का सही तरीके से उपयोग करना बहुत महत्वपूर्ण है, ताकि आपके डेटा को सुरक्षित रखा जा सके और प्रोग्राम को अधिक modular और maintainable बनाया जा सके।
  • Private: सुरक्षा के लिए सबसे अच्छा, लेकिन केवल क्लास के अंदर से एक्सेस।
  • Protected: डेरिव्ड क्लासों के लिए उपयोगी, लेकिन बाहरी एक्सेस प्रतिबंधित।
  • Public: सबसे खुला एक्सेस, उपयोग तब करें जब सुरक्षा की कोई आवश्यकता न हो।

इन स्पेसिफायर्स का सही उपयोग आपके प्रोग्राम को अधिक सुरक्षित और संरचित बनाता है।

Types of Access Specifiers in C++ in Hindi | C++ में एक्सेस स्पेसिफायर्स के प्रकार :

C++ में तीन मुख्य एक्सेस स्पेसिफायर्स होते हैं :

प्राइवेट (Private)
प्रोटेक्टेड (Protected)
पब्लिक (Public)

इन एक्सेस स्पेसिफायर्स का उपयोग डेटा और फंक्शन की एक्सेसिबिलिटी को नियंत्रित करने के लिए किया जाता है।

1. प्राइवेट (Private) एक्सेस स्पेसिफायर :

प्राइवेट एक्सेस स्पेसिफायर के तहत डिफाइन किए गए डेटा मेंबर्स और मेंबर फंक्शंस को क्लास के बाहर से सीधे एक्सेस नहीं किया जा सकता। केवल वही फंक्शन जो उसी क्लास के अंदर परिभाषित हैं, वे ही इन प्राइवेट मेंबर्स को एक्सेस कर सकते हैं। यह सुरक्षा का उच्चतम स्तर है।

उदाहरण:

#include<iostream>
using namespace std;

class Employee {
private:
    int salary;

public:
    void setSalary(int s) {
        salary = s;
    }

    int getSalary() {
        return salary;
    }
};

int main() {
    Employee emp;
    // emp.salary = 5000;   // Error: 'salary' is private
    emp.setSalary(5000);     // सार्वजनिक फंक्शन के माध्यम से प्राइवेट मेंबर को सेट किया
    cout << "Salary: " << emp.getSalary() << endl;
    return 0;
}

व्याख्या:

  • salary डेटा मेंबर को private घोषित किया गया है, इसलिए इसे सीधे main() से एक्सेस नहीं किया जा सकता। यदि आप इसे सीधे एक्सेस करने की कोशिश करेंगे, तो कंपाइलर एरर देगा।
  • इसे एक्सेस करने के लिए, हमने setSalary() और getSalary() नामक सार्वजनिक (public) फंक्शन्स का उपयोग किया।
  • निष्कर्ष: प्राइवेट स्पेसिफायर से क्लास के बाहर से डेटा तक सीधी पहुँच को रोक दिया जाता है, जिससे डेटा की सुरक्षा और गोपनीयता सुनिश्चित होती है।

2. प्रोटेक्टेड (Protected) एक्सेस स्पेसिफायर :

प्रोटेक्टेड एक्सेस स्पेसिफायर के तहत डिफाइन किए गए डेटा मेंबर्स और मेंबर फंक्शंस को भी क्लास के बाहर से सीधे एक्सेस नहीं किया जा सकता। लेकिन इनकी एक खास विशेषता यह है कि इन्हें डेरिव्ड (derived) क्लासों द्वारा एक्सेस किया जा सकता है।

उदाहरण:

#include<iostream>
using namespace std;

class Base {
protected:
    int protectedVar;

public:
    void setProtectedVar(int p) {
        protectedVar = p;
    }
};

class Derived : public Base {
public:
    void show() {
        cout << "Protected Variable: " << protectedVar << endl;
    }
};

int main() {
    Derived obj;
    obj.setProtectedVar(10);
    obj.show();  // Derived क्लास के माध्यम से प्रोटेक्टेड डेटा मेंबर को एक्सेस किया गया
    return 0;
}

व्याख्या ;

  • protectedVar को protected एक्सेस स्पेसिफायर के तहत डिफाइन किया गया है, इसलिए इसे सीधे main() में एक्सेस नहीं किया जा सकता।
  • हालांकि, Derived क्लास ने इसे एक्सेस किया है क्योंकि protectedVar को base class Base से विरासत में प्राप्त किया गया है।
  • निष्कर्ष: प्रोटेक्टेड स्पेसिफायर का मुख्य उपयोग तब होता है जब हम चाहते हैं कि डेटा क्लास और उसकी डेरिव्ड क्लासों के भीतर ही एक्सेस हो।

3. पब्लिक (Public) एक्सेस स्पेसिफायर :

पब्लिक एक्सेस स्पेसिफायर के तहत डिफाइन किए गए डेटा मेंबर्स और मेंबर फंक्शंस को कहीं से भी एक्सेस किया जा सकता है, चाहे वह क्लास के अंदर हो या क्लास के बाहर। यह सुरक्षा का सबसे निचला स्तर होता है क्योंकि सार्वजनिक सदस्य पूरी तरह से खुले होते हैं।

उदाहरण :

#include<iostream>
using namespace std;

class Student {
public:
    string name;
    int age;

    void display() {
        cout << "Name: " << name << ", Age: " << age << endl;
    }
};

int main() {
    Student student;
    student.name = "Rahul";
    student.age = 21;
    student.display();  // पब्लिक डेटा मेंबर्स को सीधे एक्सेस किया गया
    return 0;
}

व्याख्या :

  • name और age दोनों डेटा मेंबर्स को public घोषित किया गया है, इसलिए इन्हें main() में सीधे एक्सेस और मॉडिफाई किया गया है।
  • display() फंक्शन ने पब्लिक मेंबर्स को प्रिंट किया।
  • निष्कर्ष: पब्लिक स्पेसिफायर किसी भी डेटा या फंक्शन को पूरी तरह से खुले तौर पर एक्सेस करने की अनुमति देता है, चाहे वह किसी भी क्लास से हो।

डेटा एनकैप्सुलेशन और एक्सेस स्पेसिफायर्स :

डेटा एनकैप्सुलेशन (Data Encapsulation) वह प्रक्रिया है जिसमें डेटा को छिपाने और उसे नियंत्रित करने के लिए प्राइवेट और प्रोटेक्टेड एक्सेस स्पेसिफायर्स का उपयोग किया जाता है। एनकैप्सुलेशन के माध्यम से, डेटा और 
फंक्शंस को एक साथ बांध दिया जाता है, और बाहरी इंटरफेस को नियंत्रित किया जाता है ताकि केवल पब्लिक फंक्शंस के माध्यम से ही डेटा को एक्सेस किया जा सके।

उदाहरण:

#include<iostream>
using namespace std;

class BankAccount {
private:
    int balance;

public:
    void deposit(int amount) {
        if (amount > 0) {
            balance += amount;
            cout << "Deposited: " << amount << endl;
        }
    }

    void withdraw(int amount) {
        if (amount <= balance) {
            balance -= amount;
            cout << "Withdrawn: " << amount << endl;
        }
        else {
            cout << "Insufficient Balance" << endl;
        }
    }

    int getBalance() {
        return balance;
    }
};

int main() {
    BankAccount myAccount;
    myAccount.deposit(1000);
    myAccount.withdraw(500);
    cout << "Current Balance: " << myAccount.getBalance() << endl;
    return 0;
}

व्याख्या:

  • balance को private रखा गया है ताकि इसे सीधे क्लास के बाहर से एक्सेस न किया जा सके।
  • इसे एक्सेस करने और बदलने के लिए deposit(), withdraw(), और getBalance() जैसे पब्लिक फंक्शंस उपलब्ध कराए गए हैं, ताकि केवल वैध तरीके से डेटा को एक्सेस या बदलने की अनुमति हो।