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.

classesContainerEmpresa

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

Deixe um comentário

O seu endereço de e-mail não será publicado. Campos obrigatórios são marcados com *

Esse site utiliza o Akismet para reduzir spam. Aprenda como seus dados de comentários são processados.