Escolar Documentos
Profissional Documentos
Cultura Documentos
class Vetor {
int v[10];
public:
int get(int i) { return v[i]; }
void set(int i, int valor) { v[i]=valor; }
};
int main() {
Vetor vetor;
for (int i = 0; i < 15; i++) {
vetor.set(i,i);
cout << vetor.get(i) << endl;
}
}
// getset2.cpp
#include <iostream>
#include <cassert>
#include <climits>
using namespace std;
class Vetor {
static const int maximo=10;
int v[maximo];
public:
int get(int i) {
if (0<=i && i<maximo) return v[i];
else return INT_MIN;
}
bool set(int i, int valor) {
if (0<=i && i<maximo) { v[i]=valor; return true; }
else return false;
}
};
int main() {
Vetor vetor;
for (int i = 0; i < 15; i++) {
if (!vetor.set(i,i)) {
cout << "Erro: Indice invalido em Vetor::set"
<< endl;
exit(1);
}
int t=vetor.get(i);
if (t==INT_MIN) {
cout << "Erro: Indice invalido em Vetor::get"
<< endl;
exit(1);
} else cout << t << endl;
}
}
class Erro {
public:
string nome;
};
class Vetor {
static const int maximo=10;
int v[maximo];
public:
int get(int i) {
if (0<=i && i<maximo) return v[i];
else throw(Erro{"Erro: Indice invalido em Vetor::get"});
}
void set(int i, int valor) {
if (0<=i && i<maximo) { v[i]=valor; }
else throw(Erro{"Erro: Indice invalido em Vetor::set"});
}
};
int main() {
Vetor vetor;
for (int i = 0; i < 15; i++) {
vetor.set(i,i);
cout << vetor.get(i) << endl;
}
}
Usando throw para jogar um char no caso de erro.
//getset3b.cpp
#include <iostream>
#include <cassert>
#include <string>
using namespace std;
class Vetor {
static const int maximo=10;
int v[maximo];
public:
int get(int i) {
if (0<=i && i<maximo) return v[i];
else throw('g');
}
void set(int i, int valor) {
if (0<=i && i<maximo) { v[i]=valor; }
else throw('s');
}
};
int main() {
Vetor vetor;
for (int i = 0; i < 15; i++) {
vetor.set(i,i);
cout << vetor.get(i) << endl;
}
}
Usando try...catch para pegar um objeto jogado no erro.
//getset4.cpp
#include <iostream>
#include <cassert>
#include <string>
using namespace std;
class Erro {
public:
string mensagem;
};
class Vetor {
static const int maximo=10;
int v[maximo];
public:
int get(int i) {
if (0<=i && i<maximo) return v[i];
else throw(Erro{"Erro: Indice invalido em Vetor::get"});
}
void set(int i, int valor) {
if (0<=i && i<maximo) { v[i]=valor; }
else throw(Erro{"Erro: Indice invalido em Vetor::set"});
}
};
int main() {
try {
Vetor vetor;
for (int i = 0; i < 15; i++) {
vetor.set(i,i);
cout << vetor.get(i) << endl;
}
} catch (Erro err) {
cout << err.mensagem << endl;
}
}
//getset4b.cpp
#include <iostream>
#include <cassert>
#include <string>
using namespace std;
class Vetor {
static const int maximo=10;
int v[maximo];
public:
int get(int i) {
if (0<=i && i<maximo) return v[i];
else throw(string{"Erro: Indice invalido em Vetor::get"});
}
void set(int i, int valor) {
if (0<=i && i<maximo) { v[i]=valor; }
else throw(string{"Erro: Indice invalido em Vetor::set"});
}
};
void g() {
Vetor vetor;
for (int i = 0; i < 15; i++) {
vetor.set(i,i);
cout << vetor.get(i) << endl;
}
}
void f() {
g();
}
int main() {
try {
f();
} catch (string err) {
cout << err << endl;
}
}
Se você quiser pegar todos os throw não pegos:
//getset5.cpp
#include <iostream>
#include <cassert>
#include <string>
using namespace std;
class Erro {
public:
string mensagem;
};
class Vetor {
static const int maximo=10;
int v[maximo];
public:
int get(int i) {
if (0<=i && i<maximo) return v[i];
else throw(Erro{"Erro: Indice invalido em Vetor::get"});
}
void set(int i, int valor) {
if (0<=i && i<maximo) { v[i]=valor; }
else throw(Erro{"Erro: Indice invalido em Vetor::set"});
}
};
int main() {
try {
Vetor vetor;
for (int i = 0; i < 15; i++) {
vetor.set(i,i);
cout << vetor.get(i) << endl;
}
} catch (char ch) {
cout << ch << endl;
} catch (int i) {
cout << i << endl;
} catch (...) {
cout << "Erro nao pego" << endl;
}
}
Destructor é chamado pelo throw.
//getset6.cpp - destructor e' chamado pelo throw
#include <iostream>
#include <cassert>
#include <string>
using namespace std;
class Vetor {
int maximo;
int* v;
public:
Vetor(int _maximo) {
cout << "Constructor" << endl;
maximo=_maximo;
v=new int[maximo];
}
~Vetor() {
cout << "Destructor" << endl;
delete[] v;
}
int get(int i) {
if (0<=i && i<maximo) return v[i];
else throw(string{"Erro: Indice invalido em Vetor::get"});
}
void set(int i, int valor) {
if (0<=i && i<maximo) { v[i]=valor; }
else throw(string{"Erro: Indice invalido em Vetor::set"});
}
};
int main() {
try {
Vetor vetor{10};
for (int i = 0; i < 15; i++) {
vetor.set(i,i);
cout << vetor.get(i) << endl;
}
} catch (string err) {
cout << err << endl;
}
}
//getset7.cpp - usando operator overload e referência
#include <iostream>
#include <cassert>
#include <string>
using namespace std;
class Vetor {
int maximo;
int* v;
public:
Vetor(int _maximo) {
cout << "Constructor" << endl;
maximo=_maximo;
v=new int[maximo];
}
~Vetor() {
cout << "Destructor" << endl;
delete[] v;
}
int& operator[](int i) {
if (0<=i && i<maximo) return v[i];
else throw(string{"Erro: Indice invalido"});
}
};
int main() {
try {
Vetor vetor{10};
for (int i = 0; i < 15; i++) {
vetor[i]=i;
cout << vetor[i] << endl;
}
} catch (string err) {
cout << err << endl;
}
}