1. Este site usa cookies. Ao continuar a usar este site está a concordar com o nosso uso de cookies. Saber Mais.

c++ excepçoes

Discussão em 'Programação' iniciada por goku_san, 30 de Abril de 2008. (Respostas: 6; Visualizações: 852)

  1. goku_san

    goku_san Power Member

    podem me dar uma ajuda nisto ?


    Complete/altere o programa seguinte de modo a tratar as possíveis excepções.
    Se uma excepção do tipo "impossibilidadeDesportiva" ocorre, deve ser escrito o nome do clube que originou essa ocorrência. Deve implementar também a classe "impossibilidadeDesportiva".
    Código:
    #include <iostream>
    #include <exception>
    #include <string>
    
    using namespace std;
    
    class Clube {
    string nome;
    bool campeao;
    public:
    Clube() { campeao=false;nome="";}
    void setNome(string s){ nome=s;}
    void setCampeao(bool b)
    {
    string e="porto";
    if(b==true && nome.compare("FCPorto"))
    throw impossibilidadeDesportiva(nome);
    campeao=b;
    }
    string getNome() const {return nome;}
    
    };
    
    class impossibilidadeDesportiva{
    public:
    string clube;
    impossibilidadeDesportiva(string club){clube = club;}
    
    };
    
    int main() {
    Clube c1, c2, c3;
    c1.setNome("FCPorto");
    cout << "Nome do Clube: " << c1.getNome() << endl;
    c2.setNome("Guimaraes");
    cout << "Nome do Clube: " << c2.getNome() << endl;
    c3.setNome("Sporting");
    cout << "Nome do Clube: " << c3.getNome() << endl;
    
    try {c1.setCampeao(true);
    }
    catch (impossibilidadeDesportiva e) {
    cout << e.clube << endl; 
    }
    try {c2.setCampeao(true);
    }
    catch (impossibilidadeDesportiva e) {
    cout << e.clube << endl; 
    }
    try {c3.setCampeao(true);
    }
    catch (impossibilidadeDesportiva e) {
    cout << e.clube << endl; 
    }
    }
    
     
  2. jahred

    jahred Power Member

    eh pah não devo ter percebido bem o código ou o problema, porque esse código não tá a tratar excepções?
     
  3. goku_san

    goku_san Power Member

    nao compila.. diz que impossibilidadeDesportiva n esta declarada na funçao void setcampeao...
     
  4. balute

    balute Power Member

    Primeiro tens que criar uma instância da classe impossibilidadeDesportiva.
    Vê lá se isto funciona:
    Código:
    throw new impossibilidadeDesportiva(nome);
     
  5. goku_san

    goku_san Power Member

  6. goku_san

    goku_san Power Member

    Assim já funciona.. a única diferença foi ter definido void setCampeao(bool b) fora da classe.. nao sabia que havia diferenças nisso..


    Código:
    #include <iostream>
    #include <exception>
    #include <string>
    using namespace std;
    class Clube {
    string nome;
    bool campeao;
    public:
    Clube() { campeao=false;nome="";}
    void setNome(string s){ nome=s;}
    void setCampeao(bool b);
    string getNome() const {return nome;}
    };
    class impossibilidadeDesportiva{
    public:
    string clube;
    impossibilidadeDesportiva(string club){clube = club;}
    };
    void Clube::setCampeao(bool b) {
    if(b==true && nome.compare("FCPorto"))
    throw impossibilidadeDesportiva(nome);
    campeao=b;
    }
    int main() {
    Clube c1, c2, c3;
    c1.setNome("FCPorto");
    cout << "Nome do Clube: " << c1.getNome() << endl;
    c2.setNome("Guimaraes");
    cout << "Nome do Clube: " << c2.getNome() << endl;
    c3.setNome("Sporting");
    cout << "Nome do Clube: " << c3.getNome() << endl;
    try {c1.setCampeao(true);
    }
    catch (impossibilidadeDesportiva e) {
    cout << e.clube << endl; 
    }
    try {c2.setCampeao(true);
    }
    catch (impossibilidadeDesportiva e) {
    cout << e.clube << endl; 
    }
    try {c3.setCampeao(true);
    }
    catch (impossibilidadeDesportiva e) {
    cout << e.clube << endl; 
    }
    }
    
     
  7. goku_san

    goku_san Power Member

    Afinal o problema era a classe impossibilidadeDesportiva estar definidada depois da funçao.

    cumps e obrigado :002:
     

Partilhar esta Página