Documenti di Didattica
Documenti di Professioni
Documenti di Cultura
Nveis de Acesso
Mtodos get e set
NVEIS DE ACESSO
Modificadores de acesso no C++
Encapsulamento {
private:
string nome; // Atributo privado [1]
Note em [1] que o atributo nome foi public:
posto depois da chave private, void setNome(string);
assim ela ser compreendida pelo string getNome(void);
compilador como uma varivel int poderDeLuta; // Atributo pblico [2]
privada da classe Sayajins. };
int main()
Em [2] o atributo poderDeLuta {
considerado como uma varivel Sayajins kakaroto;
pblica pelo compilador. kakaroto.setNome("Goku"); // Modificando nome [3]
kakaroto.poderDeLuta = 10000; // Modificando poderDeLuta [4]
Note que em [3] e em [4] so feitas cout << "Nome: " << kakaroto.getNome() << "\nPoder de Luta: ";
modificaes nos atributos da classe. cout << kakaroto.poderDeLuta << endl;
Tais modificaes so feitas de }
maneiras distintas devido aos void Sayajins::setNome(string nome){
modificadores de acesso de cada this->nome = nome;
varivel.
}
string Sayajins::getNome(void){
return this->nome; }
Sada do Cdigo anterior
Note que o encapsulamento no pode ser visto levando em considerao
somente a sada.
Definindo funes-membro (mtodos) de
acesso.
Uma funo membro de acesso permite que se acesse de
forma indireta um atributo da classe. Seja ele um atributo
public ou private;
Geralmente se utilizam as funes membro de acesso get() e
set() para manipular variveis privadas;
O mtodo set() geralmente recebe um parmetro e o
atribui a uma varivel especifica. Porm, essa atribuio
no feita de maneira livre. Essa atribuio tende a seguir
o que as regras da classe determinam;
O mtodo get() geralmente retorna valores de um
atributo privado;
Exemplo
class Pessoa{
private:
int main(){
string name;
Pessoa p1;
public:
p1.set_name("goku");
void set_name(string n){
name = n;
cout << "A pessoa tem nome: " <<
name[0] = toupper(name[0]);
p1.get_name() << endl;
}
string get_name(){
system("pause");
return name;
return 0;
}
}
};
O output do programa
Perceba que o nome tem a primeira letra maiscula
class A {
public:
Herana protegida e int x;
protected:
privada int y;
private:
int z;
};
Exerccio 2
Modifique as classes Estudante, e Disciplina, da Aula 08, para que empreguem construtores,
nveis de acesso e encapsulamento. Faa tambm as modificaes necessrias na funo main
correspondente.
Exerccio 1
int main(){
setlocale(LC_ALL,"Portuguese");
system("pause");
return 0;
}
Gabarito Exerccio 1
class Dinheiro{
void set_reais(int r){
private:
reais = r;
int reais;
}
int centavos;
int get_centavos(){
public:
return centavos;
Dinheiro(){
}
reais = 0;
void set_centavos(int c){
centavos = 0;
reais = reais + c/100;
}
centavos = c%100;
}
Dinheiro(int r, int c)
{
void print(){
reais = r + c/100;
cout << "R$" << reais << "," <<
centavos = c%100;
centavos << endl;
}
}
int get_reais(){
};
return reais;
}
#include <iostream>
#include "estudante.h"
#include "disciplina.h" main.cpp
Gabarito Exerccio 2 int main() {
d1.imprimir_matriculados();
return 0;
}
#ifndef ESTUDANTE_H estudante.h
#define ESTUDANTE_H
Gabarito Exerccio 2
#include <string>
#include <iostream>
enum Curso{
UNKNOWN,
ENGENHARIA_ELETRICA,
Modifique as classes Estudante, e FISICA,
Disciplina, da Aula 08, para que ENGENHARIA_DE_REDES,
empreguem construtores, nveis de COMPUTACAO,
ADMINISTRACAO
acesso e encapsulamento. Faa
};
tambm as modificaes necessrias
na funo main correspondente. class Estudante{
private:
string m_nome;
Curso m_curso;
unsigned int m_matricula;
string curso_to_string(Curso);
estudante.h
Gabarito Exerccio 2
public:
Estudante();
Estudante(string nm, Curso crs, unsigned int mat);
#endif
#include <string>
#include <iostream>
#include "estudante.h" estudante.cpp
Gabarito Exerccio 2 Estudante::Estudante(){
m_nome = "";
m_curso = UNKNOWN;
m_matricula = 0;
}
void Estudante::imprimir_dados(void){
cout << m_nome << " " << curso_to_string(m_curso) << ":" <<
m_matricula << endl;
}
estudante.cpp
Gabarito Exerccio 2
string Estudante::curso_to_string(Curso crs){
switch(crs){
case ENGENHARIA_ELETRICA:
return "Engenharia Eletrica";
case FISICA:
return "Fisica";
case ENGENHARIA_DE_REDES:
Modifique as classes Estudante, e return "Engenharia De Redes";
Disciplina, da Aula 08, para que case COMPUTACAO:
empreguem construtores, nveis de return "Computacao";
case ADMINISTRACAO:
acesso e encapsulamento. Faa
return "Administracao";
tambm as modificaes necessrias
}
na funo main correspondente.
}
#ifndef DISCIPLINA_H
#define DISCIPLINA_H
disciplina.h
#include <string>
Gabarito Exerccio 2 #include <vector>
#include "estudante.h"
class Disciplina{
private:
vector<Estudante> m_matriculados;
string m_nome;
Modifique as classes Estudante, e
Disciplina, da Aula 08, para que
public:
empreguem construtores, nveis de
acesso e encapsulamento. Faa Disciplina();
tambm as modificaes necessrias Disciplina(string nm);
na funo main correspondente.
string get_nome() const{
return m_nome;
}
void matricular(Estudante);
void imprimir_matriculados(void);
};
#endif
#include <iostream>
#include <string> disciplina.cpp
#include <vector>
Gabarito Exerccio 2 #include "estudante.h"
#include "disciplina.h"
Disciplina::Disciplina(){
m_nome = "";
}
void Disciplina::imprimir_matriculados(void){
cout << "Matriculados na disciplina " << m_nome << ":" <<
endl;
for(int k = 0; k < m_matriculados.size(); ++k){
(m_matriculados[k]).imprimir_dados();
}
}