Modificadores de acesso em C++
Modificadores de acesso são palavras-chave especiais em C++ que controlam a visibilidade dos membros da classe (dados e funções).
Eles ajudam na implementação da ocultação de dados, restringindo ou permitindo o acesso a certas partes de uma classe.
Vamos discutir isso um por um
1. Especificador público
O especificador público torna os membros da classe (variáveis e funções) acessíveis de qualquer lugar - dentro da classe, fora da classe ou até mesmo de outros arquivos.
2. Especificador Privado
O especificador privado torna os membros da classe acessíveis apenas dentro da própria classe (principalmente métodos de membros) e é usado principalmente para ocultar dados externos para que possamos fazer alterações internamente posteriormente sem alterar o código de seus usuários. Por padrão, todos os membros da classe em C++ são privados se nenhum especificador for mencionado.
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 ; }
Saída
Name: Fedrick
O que acontece se tentarmos acessar membros privados?
O código apresenta erro de compilador como podemos ver abaixo.
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 ; }
Saída
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. Especificador Protegido
- O especificador protegido torna os membros acessíveis dentro da própria classe e em seu derivado classes (filho), mas não formam código externo.
- É usado principalmente em herança, permitindo que classes filhas reutilizem ou modifiquem dados e funções, mantendo-os ocultos do mundo exterior.
#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 ; }
Saída
Employee Name: Fedrick Manager Name: Rohit Manager ID: 102
Criar questionárioObservação : Este acesso por herança pode alterar o modificador de acesso dos elementos da classe base na classe derivada dependendo do modo de herança .