Prática com Orientação a Objetos em C++ [parte 2]
Nesse artigo é mostrada uma forma de representar a associação entre duas classes no C++. O artigo considera que a definição da classe “empresa” já está codificada (o código é mostrado no artigo Prática com Oridentação a Objetos em C++ [parte 1]) e o esquema considerado é mostrado na figura abaixo.
Boa parte da implementação da classe container é básica e similar a implementação da classe empresa, tendo um método construtor e métodos getters e setters, que retornam valores das variáveis e alteram valores das variáveis respectivamente.
O código destaca algumas linhas que são as que realizam a associação entre as duas classes. Pelo multiplidade presente mostrada no modelo, a empresa pode ter vários containers, mas um container é de apenas uma empresa. Para representar essa associação foi criado na linha 6 um ponteiro para um objeto empresa.
A associação então é feita através desse ponteiro que referenciará um objeto do tipo empresa. No método construtor (linha 9), o último parâmetro recebido é um ponteiro para um objeto de empresa e a linha 13 atribui o parâmetro passado ao ponteiro atributo da classe, finalizando a associação.
class container {
private:
int _id;
string _dimensoes;
bool _refrigerado;
empresa* _dona;
public:
container(int id, string dim, bool refri, empresa *dona) {
_id = id;
_dimensoes = dim;
_refrigerado = refri;
_dona = dona;
}
string getDimensoes() {
return _dimensoes;
}
bool getRefrigerado() {
return _refrigerado;
}
string getEmpresa() {
return _dona->getNome();
}
};
Agora associado, é possível que um objeto container pode solicitar os métodos públicos de uma empresa. Isso é feito, por exemplo, através do método getEmpresa(). Veja que ele retorna o nome da empresa e que para isso foi utilizado o operador ->, já que essa é a forma de invocar métodos a partir de ponteiros (é utilizado -> ao invés de .).
Para testar a classe é utilizado o código a seguir na função main(). A partir de uma empresa definidas, seu endereço de memória é passado como parâmetro na construção do objeto de container (utilizando o operador & para pegar o endereço de memória) e em seguida retornando o nome da empresa que é proprietária do container.
int main() {
empresa teste("Emp. SA", 1);
container x(1, "10x2x5", true, &teste);
cout << "Dona: " << x.getEmpresa() << endl;
return 0;
}