C++ のアクセス修飾子

C++ のアクセス修飾子

アクセス修飾子は、 特別なキーワード C++ では、クラス メンバー (データと関数) の可視性を制御します。
これらは、クラスの特定の部分へのアクセスを制限または許可することで、データ隠蔽の実装に役立ちます。

アクセス修飾子の種類

一つずつ話し合ってみましょう

1. パブリック指定子

パブリック指定子を使用すると、クラスのメンバー (変数と関数) に、クラス内、クラス外、または他のファイルなど、どこからでもアクセスできるようになります。

2. プライベート指定子

プライベート指定子は、クラス メンバーにクラス自体 (主にメンバー メソッド) 内でのみアクセスできるようにし、主にユーザーのコードを変更せずに後で内部で変更できるように、データを外部から隠すために使用されます。指定子が指定されていない場合、デフォルトでは C++ のすべてのクラス メンバーはプライベートになります。

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  ;   }   

出力
Name: Fedrick  

プライベートメンバーにアクセスしようとするとどうなりますか?

以下に示すように、コードではコンパイラ エラーが発生します。

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  ;   }   

出力

 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 指定子により、クラス自体とそのクラス内でメンバーにアクセスできるようになります。 派生 (子) クラスですが、外部コードを形成しません。
  • これは主に継承で使用され、子クラスがデータや関数を外界から隠したまま再利用または変更できるようにします。
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  ;   }   

出力
Employee Name: Fedrick Manager Name: Rohit Manager ID: 102  


注記 : 継承によるこのアクセスは、派生クラスの基本クラスの要素のアクセス修飾子を、 継承のモード

クイズの作成