(→Solução) |
(→Solução) |
||
Line 105: | Line 105: | ||
Piao piao("vermelho", 200, 5000); | Piao piao("vermelho", 200, 5000); | ||
+ | Piao piao2("amarelo", 250, 4500); | ||
piao.describe(); | piao.describe(); | ||
piao.spin(); | piao.spin(); | ||
Corda corda("verde", 300, 2.5); | Corda corda("verde", 300, 2.5); | ||
+ | Corda corda2("roxo", 350, 3.0); | ||
corda.describe(); | corda.describe(); | ||
corda.hop(); | corda.hop(); | ||
Line 116: | Line 118: | ||
} else { | } else { | ||
std::cout << "Os brinquedos genéricos são diferentes" << std::endl; | std::cout << "Os brinquedos genéricos são diferentes" << std::endl; | ||
+ | } | ||
+ | |||
+ | if (piao == piao2) { | ||
+ | std::cout << "Os piões são iguais" << std::endl; | ||
+ | } else { | ||
+ | std::cout << "Os piões são diferentes" << std::endl; | ||
+ | } | ||
+ | |||
+ | if (corda == corda2) { | ||
+ | std::cout << "As cordas são iguais" << std::endl; | ||
+ | } else { | ||
+ | std::cout << "As cordas são diferentes" << std::endl; | ||
} | } | ||
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.
As directivas #include foram omitidas.
classe Brinquedo |
---|
class Brinquedo {
protected:
std::string cor;
float peso;
public:
Brinquedo(float peso) : cor("branco"), peso(peso) {}
Brinquedo(const 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(const 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(const 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 piao2("amarelo", 250, 4500);
piao.describe();
piao.spin();
Corda corda("verde", 300, 2.5);
Corda corda2("roxo", 350, 3.0);
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;
}
if (piao == piao2) {
std::cout << "Os piões são iguais" << std::endl;
} else {
std::cout << "Os piões são diferentes" << std::endl;
}
if (corda == corda2) {
std::cout << "As cordas são iguais" << std::endl;
} else {
std::cout << "As cordas são diferentes" << std::endl;
}
std::cout << brinquedo_generico << std::endl;
std::cout << piao << std::endl;
std::cout << corda << std::endl;
return 0;
}
|