Enviado em 14/07/2022 - 10:18h
Olá. Estou tentando criar um programinha com polimorfismo e herança no C++#include <iostream>
#include "automovel.hpp"
#include "carro.hpp"
#include "moto.hpp"
using namespace std;
int main(){
Automovel *automovel = new Carro();
automovel->setjanelas(4);
cout << automovel->getjanelas() << endl;
return 0;
}
#include <iostream>
using namespace std;
class Automovel {
public:
int rodas, janelas;
float combustivel, velocidade;
bool ligado;
void setrodas(int rodas);
void setjanelas(int janelas);
void setcombustivel(float combustivel);
void setvelocidade(float velocidade);
void setligado(bool ligado);
int getrodas();
int getjanelas();
float getcombustivel();
float getvelocidade();
bool getligado();
};
#include <iostream>
#include "automovel.hpp"
void Automovel::setrodas(int rodas){
this->rodas = rodas;
}
void Automovel::setjanelas(int janelas){
this->janelas = janelas;
}
void Automovel::setcombustivel(float combustivel){
this->combustivel = combustivel;
}
void Automovel::setvelocidade(float velocidade){
this->velocidade = velocidade;
}
void Automovel::setligado(bool ligado){
this->ligado = ligado;
}
int Automovel::getrodas(){
return this->rodas;
}
int Automovel::getjanelas(){
return this->janelas;
}
float Automovel::getcombustivel(){
return this->combustivel;
}
float Automovel::getvelocidade(){
return this->velocidade;
}
bool Automovel::getligado(){
return this->ligado;
}
class Carro: public Automovel
{
public:
Carro();
};
#include "automovel.hpp"
#include "carro.hpp"
Carro::Carro(){
rodas = 4;
janelas = 4;
combustivel = 10.0;
velocidade = 0;
ligado = false;
}
class Moto: public Automovel
{
public:
Moto();
};
#include "automovel.hpp"
#include "moto.hpp"
Moto::Moto(){
rodas = 2;
janelas = 0;
combustivel = 2.0;
velocidade = 10000;
ligado = true;
}
$ g++ automovel.cpp automovel.hpp carro.cpp carro.hpp moto.cpp moto.hpp principal.cpp -o programa
carro.hpp:2:1: error: expected class-name before ‘{’ token
2 | {
| ^
moto.hpp:2:1: error: expected class-name before ‘{’ token
2 | {
| ^
$
Enviado em 14/07/2022 - 16:55h
Deve ser porque você tá tentando compilar tudo de uma vez, digo, o g++ não compila nenhum dos arquivos passado no terminal.g++ -c arquivoClasse.cpp
g++ -c automovel.cpp
g++ -c carro.cpp
g++ -c moto.cpp
g++ -o programa principal.cpp automovel.o carro.o moto.o
Enviado em 14/07/2022 - 20:07h
g++ -c arquivoClasse.cpp
g++ -c automovel.cpp
g++ -c carro.cpp
g++ -c moto.cpp
g++ -o programa principal.cpp automovel.o carro.o moto.o
Enviado em 14/07/2022 - 23:44h
As sugestões acima estão OK, mas a invocação que você fez ao g++ não está errada, só não é muito eficiente, porque a ideia de separar a programação em múltiplos arquivos diferentes é justamente poder compilar as partes que dependam de alterações no código fonte desde a última compilação.// Exemplo: arquivo “exemplo.h”
#ifndef EXEMPLO_H_GUARD__ // Testa se o símbolo de guarda está indefinido.
#define EXEMPLO_H_GUARD__ // Define o símbolo de guarda, de modo a evitar que novas inclusões do mesmo arquivo dentro da mesma compilação provoque o aparecimento de declarações repetidas.
/* Suas declarações e definições de tipos vão aqui. */
#endif // Fecha o bloco de compilação condicional baseada no símbolo de guarda.
#ifndef X_H__
#define X_H__
#include <string>
class X {
private:
std::string value;
public:
X(const std::string &);
inline std::string get(){ return value; }
};
#endif // !defined(X_H__)
// Arquivo x.cc: implementação da classe X.
#include <string>
#include "x.h"
using namespace std;
X::X(const string &s): value(s) { }
#include <iostream>
struct automovel {
void barulho() const { std::cout << "[barulho genérico]\n"; }
};
struct carro: public automovel {
void barulho() const { std::cout << "vruum, vruum\n"; }
};
struct motoca: public automovel {
void barulho() const { std::cout << "pó-ró-pó-pó-pó-pó\n"; }
};
int main(){
automovel *autos[]={ new automovel, new carro, new motoca };
for(auto x: autos)
x->barulho();
}
struct automovel {
virtual void barulho() const { std::cout << "[barulho genérico]\n"; }
};
$ g++ x.cc
$ ./a.out
[barulho genérico]
vruum, vruum
pó-ró-pó-pó-pó-pó
struct automovel {
virtual void barulho() const = 0;
};
Enviado em 15/07/2022 - 14:30h
Muito obrigado a todos que me responderam.Instalação do Ambiente .NET (#C) no Slackware 15.0
Kali On The Box - Colocando o Kali para rodar no Raspberry Pi
Como contribuir com a atualização de pacotes no Void Linux
Colocar dispositivo móvel Samsung em modo Download pela linha de comando
Instalando Slackware com btrfs
Debian 11 bullseye não tem terminal transparente (2)
System Halted - ao desligar o computador (7)
Instalação Fedora 36 com "\home&q... separada: Questão sobre Sist... (5)