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