Brinquedos em C++

From Wiki**3

Revision as of 09:26, 4 May 2023 by Root (talk | contribs) (Created page with "== Problema == Considere o conceito de brinquedo, contendo as propriedades cor e peso. Considere ainda as especializações deste conceito: pião e corda de saltar. Os concei...")

(diff) ← Older revision | Latest revision (diff) | Newer revision → (diff)

Problema

Considere o conceito de brinquedo, contendo as propriedades cor e peso. Considere ainda as especializações deste conceito: pião e corda de saltar. Os conceitos pião e corda têm, respectivamente, a velocidade de rotação e o comprimento como propriedades adicionais. Considere que todos os brinquedos podem ser descritos (função describe), mas que apenas os piões giram (spin) e que apenas cordas oscilam (hop). Implemente em C++ as classes que representam estes conceitos: cada método dos anteriores deve ser implementado simplesmente com uma instrução que apresente uma cadeia de caracteres descritiva da acção. Implemente ainda os operadores de comparação (operator==) e de envio para um canal de saída (operator<<). Os brinquedos genéricos podem ser inicializados especificando-se apenas o peso (neste caso, a cor é branca), mas podem ser também inicializados especificando-se ambas as propriedades (a acção para o peso é idêntica à anterior). Os piões e as cordas são sempre inicializados com explicitação das suas respectivas propriedades, i.e., cor, peso e velocidade de rotação ou comprimento (conforme o caso). Construa uma aplicação ("main") que ilustre a utilização das classes.

Solução

As directivas #include foram omitidas.

classe Brinquedo
class Brinquedo {
protected:
    std::string cor;
    float peso;

public:
    Brinquedo(float peso) : cor("branco"), peso(peso) {}
    Brinquedo(std::string cor, float peso) : cor(cor), peso(peso) {}

    virtual void describe() const {
        std::cout << "Brinquedo de cor " << cor << " e peso " << peso << " gramas" << std::endl;
    }

    bool operator==(const Brinquedo& other) const {
        return cor == other.cor && peso == other.peso;
    }

    friend std::ostream& operator<<(std::ostream& os, const Brinquedo& brinquedo) {
        os << "Brinquedo de cor " << brinquedo.cor << " e peso " << brinquedo.peso << " gramas";
        return os;
    }
};
classe Pião
class Piao : public Brinquedo {
    float velocidade_rotacao;

public:
    Piao(std::string cor, float peso, float velocidade_rotacao)
        : Brinquedo(cor, peso), velocidade_rotacao(velocidade_rotacao) {}

    void describe() const override {
        std::cout << "Pião de cor " << cor << ", peso " << peso << " gramas e velocidade de rotação " << velocidade_rotacao << " RPM" << std::endl;
    }

    void spin() const {
        std::cout << "O pião está a girar a " << velocidade_rotacao << " RPM" << std::endl;
    }

    bool operator==(const Piao& other) const {
        return Brinquedo::operator==(other) && velocidade_rotacao == other.velocidade_rotacao;
    }

    friend std::ostream& operator<<(std::ostream& os, const Piao& piao) {
        os << "Pião de cor " << piao.cor << ", peso " << piao.peso << " gramas e velocidade de rotação " << piao.velocidade_rotacao << " RPM";
        return os;
    }
};
classe Corda
class Corda : public Brinquedo {
    float comprimento;

public:
    Corda(std::string cor, float peso, float comprimento)
        : Brinquedo(cor, peso), comprimento(comprimento) {}

    void describe() const override {
        std::cout << "Corda de saltar de cor " << cor << ", peso " << peso << " gramas e comprimento " << comprimento << " metros" << std::endl;
    }

    void hop() const {
        std::cout << "A corda está a oscilar com um comprimento de " << comprimento << " metros" << std::endl;
    }

    bool operator==(const Corda& other) const {
        return Brinquedo::operator==(other) && comprimento == other.comprimento;
    }

    friend std::ostream& operator<<(std::ostream& os, const Corda& corda) {
        os << "Corda de saltar de cor " << corda.cor << ", peso " << corda.peso << " gramas e comprimento " << corda.comprimento << " metros";
        return os;
    }
};

Exemplo de função principal (outras seriam admissíveis).

Função principal (main)
int main() {
    Brinquedo brinquedo_generico(50);
    Brinquedo brinquedo_generico2("azul", 100);

    brinquedo_generico.describe();
    brinquedo_generico2.describe();

    Piao piao("vermelho", 200, 5000);
    piao.describe();
    piao.spin();

    Corda corda("verde", 300, 2.5);
    corda.describe();
    corda.hop();

    if (brinquedo_generico == brinquedo_generico2) {
        std::cout << "Os brinquedos genéricos são iguais" << std::endl;
    } else {
        std::cout << "Os brinquedos genéricos são diferentes" << std::endl;
    }

    std::cout << brinquedo_generico << std::endl;
    std::cout << piao << std::endl;
    std::cout << corda << std::endl;

    return 0;
}