logo

Åtkomstmodifierare i C++

Åtkomstmodifierare är speciella nyckelord i C++ som styr synligheten för klassmedlemmar (data och funktioner).
De hjälper till att implementera datadöljande genom att begränsa eller tillåta åtkomst till vissa delar av en klass.

hur många nollor i 1 miljard
typer_av_åtkomst_modifierare' title=

Låt oss diskutera det en efter en

1. Offentlig specificering

Public specifier gör klassmedlemmar (variabler och funktioner) tillgängliga från var som helst - inuti klassen utanför klassen eller till och med andra filer.



2. Privat specificator

Private specifier gör klassmedlemmar tillgängliga endast i själva klassen (främst medlemsmetoder) och används främst för att dölja data utifrån så att vi kan göra ändringar internt senare utan att ändra koden för dess användare. Som standard är alla klassmedlemmar i C++ privata om ingen specifikator nämns.

CPP
#include    using namespace std; class Employee { private:   // salary and empId cannot be accessed   // from outside the Class  double salary;  int empID; public:   string name; // Name can be accessed anywhere    Employee(string n double s int id) {  name = n;  salary = s;  empID = id;  } }; int main() {  Employee emp('Fedrick' 50000 101);  cout << 'Name: ' << emp.name << endl;  return 0; } 

Produktion
Name: Fedrick 

Vad händer om vi försöker komma åt privata medlemmar?

Koden ger kompilatorfel som vi kan se nedan.

C++
#include    using namespace std; class Employee { private:   double salary;  int empID; public:   string name;  // Constructor  Employee(string n double s int id) {  name = n;  salary = s;  empID = id;  } }; int main() {  Employee emp('Fedrick' 50000 101);  cout << emp.salary << endl;   return 0; } 

Produktion

compilation error   
prog.cpp: In function ‘int main()’:
prog.cpp:22:17: error: ‘double Employee::salary’ is private within this context
cout << emp.salary << endl;
^~~~~~
prog.cpp:6:12: note: declared private here
double salary;
^~~~~~

3. Protected Specifier

  • Den skyddade specifikationen gör medlemmar tillgängliga i själva klassen och i dess härledd (barn)klasser men inte utgör extern kod.
  • Det används främst i arv, vilket gör att barnklasser kan återanvända eller ändra data och funktioner samtidigt som de hålls dolda från omvärlden.
CPP
#include    using namespace std; class Employee { private:   double salary; protected:   int empID; public:   string name;  Employee(string n double s int id) {  name = n;  salary = s;  empID = id;  } }; // Derived class (inherits from Employee) class Manager : public Employee { public:  Manager(string n double s int id) : Employee(n s id) {}  void showDetails() {  cout << 'Manager Name: ' << name << endl;   cout << 'Manager ID: ' << empID << endl;   } }; int main() {  Employee emp('Fedrick' 50000 101);  cout << 'Employee Name: ' << emp.name << endl;  Manager m('Rohit' 70000 102);  m.showDetails();   return 0; } 

Produktion
Employee Name: Fedrick Manager Name: Rohit Manager ID: 102 


Notera : Denna åtkomst genom arv kan ändra åtkomstmodifieraren för elementen i basklassen i härledd klass beroende på arvssätt .

skillnaden mellan array och arraylist
Skapa frågesport