Dev - C++ - Problema Métodos y Herencia

 
Vista:

Problema Métodos y Herencia

Publicado por Vicente (3 intervenciones) el 28/10/2020 14:48:39
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
/*Hola, estaba haciendo este programa de batallas eligiendo las armas y "entregándoselas" a los jugadores para que después peleen entre si. Sin embargo en la parte que le entrego el arma a un jugador y pido el "get Narma()" no me retorna nada. Creo que no estoy haciendo bien el tema de la herencia y me falta arreglar los métodos de la clase Arma, si me pueden ayudar estaría perfecto, Gracias.*/
 
 
#include <iostream>
using namespace std;
 
class Arma{
	protected:
		string Narma;
		int Darma;
	public:
		Arma(string Narma,int Darma){
			this->Narma=Narma;
			this->Darma=Darma;
		}
	int getDarma(){
		return this->Darma;
	}
	string getNarma(){
		return this->Narma;
	}
};
 
class Jugador:public Arma{
	protected:
		string Njugador;
		int Vjugador;
		Arma *arma;
	public:
		Jugador(string Njugador,int Vjugador,Arma *arma):Arma(Narma,Darma){
			this->Njugador=Njugador;
			this->Vjugador=Vjugador;
			this->arma=arma;
		}
	string getNjugador(){
		return this->Njugador;
	}
	int getVjugador(){
		return this->Vjugador;
	}
	void setVjugador(int Vjugador){
		this->Vjugador=Vjugador;
	}
};
 
class Batalla{
	private:
		Jugador *jug[2];
	public:
		Batalla(){
			jug[0]=NULL;
			jug[1]=NULL;
		}
	void LadoDerecho(Jugador *Runiz){
		this->jug[0]=Runiz;
		cout<<this->jug[0]->getNjugador()<<" "<<this->jug[0]->getVjugador()<<" "<<this->jug[0]->getNarma();
		cout<<endl;
	}
	void LadoIzquierdo(Jugador *Anto){
		this->jug[1]=Anto;
		cout<<this->jug[1]->getNjugador()<<" "<<this->jug[1]->getVjugador()<<" "<<this->jug[1]->getNarma();
	}
};
 
int main(){
	Batalla *batalla=new Batalla();
	Arma *E1=new Arma("Espada",10);
    Jugador *Runiz=new Jugador("Vicente",10000,E1);
    Jugador *Anto=new Jugador("Antonia",10000,E1);
	batalla->LadoDerecho(Runiz);
	batalla->LadoIzquierdo(Anto);
 
	return 0;
}
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder

Problema Métodos y Herencia

Publicado por Nacho (181 intervenciones) el 28/10/2020 16:00:43
¿Será esto lo que quieres hacer?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
#include <iostream>
using namespace std;
 
class Arma {
protected:
    string narma;
    int darma;
public:
    Arma(string Narma, int Darma) {
        this->narma = Narma;
        this->darma = Darma;
    }
    int getDarma() {
        return this->darma;
    }
    string getNarma() {
        return this->narma;
    }
};
 
class Jugador :public Arma {
protected:
    string njugador;
    int vjugador;
    //Arma* arma;
public:
    Jugador(string Njugador, int Vjugador , string n_arma, int d_arma) :Arma(n_arma, d_arma) {
        this->njugador = Njugador;
        this->vjugador = Vjugador;
        //this->arma = arma;
    }
    string getNjugador() {
        return this->njugador;
    }
    int getVjugador() {
        return this->vjugador;
    }
    void setVjugador(int Vjugador) {
        this->njugador = Vjugador;
    }
};
 
class Batalla {
private:
    Jugador* jug[2];
public:
    Batalla() {
        jug[0] = NULL;
        jug[1] = NULL;
    }
    void LadoDerecho(Jugador* Runiz) {
        this->jug[0] = Runiz;
        cout << this->jug[0]->getNjugador() << " " << this->jug[0]->getVjugador() << " " << this->jug[0]->getNarma();
        cout << endl;
    }
    void LadoIzquierdo(Jugador* Anto) {
        this->jug[1] = Anto;
        cout << this->jug[1]->getNjugador() << " " << this->jug[1]->getVjugador() << " " << this->jug[1]->getNarma();
    }
};
 
int main() {
    Batalla* batalla = new Batalla();
   // Arma* E1 = new Arma("Espada", 10);
   // Jugador* Runiz = new Jugador("Vicente", 10000, E1);
   // Jugador* Anto = new Jugador("Antonia", 10000, E1);
    Jugador* Runiz = new Jugador("Vicente", 10000, "Espada", 10);
    Jugador* Anto = new Jugador("Antonia", 10000, "Espada", 10);
    batalla->LadoDerecho(Runiz);
    batalla->LadoIzquierdo(Anto);
 
    return 0;
}
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

Problema Métodos y Herencia

Publicado por Vicente (3 intervenciones) el 28/10/2020 16:14:07
La idea es que después el propio jugador elija su arma, no darle a él los valores predefinidos. Para después solo cambiarle el nombre del objeto (Espada) en el main como atributo del Jugador.
Ej:
Jugador* X=new Jugador("Nombre",100,Espada1); //Y la Espada1 lleva sus propias características de por si. Esa Espada1 tambien puede ser reemplazada por Espada2 que, por ejemplo tiene mas daño y congela al enemigo.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

Problema Métodos y Herencia

Publicado por Nacho (181 intervenciones) el 28/10/2020 16:22:05
Claro, ahí es donde te has liado. Para eso tienes una clase Jugador y otra Arma y das a cada objeto jugador el objeto arma que quieras en cada momento, y no desciende Jugador de Arma sino que son dos clases independientes. Has mezclado esas dos ideas en el código.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

Problema Métodos y Herencia

Publicado por Nacho (181 intervenciones) el 28/10/2020 16:38:04
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
#include <iostream>
using namespace std;
 
class Arma {
protected:
    string narma;
    int darma;
public:
    Arma(string Narma, int Darma) {
        this->narma = Narma;
        this->darma = Darma;
    }
    int getDarma() {
        return this->darma;
    }
    string getNarma() {
        return this->narma;
    }
};
 
class Jugador {
protected:
    string njugador;
    int vjugador;
    Arma* arma;
public:
    Jugador(string Njugador, int Vjugador, Arma* arma){
        this->njugador = Njugador;
        this->vjugador = Vjugador;
        this->arma = arma;
    }
    string getNjugador() {
        return this->njugador;
    }
    int getVjugador() {
        return this->vjugador;
    }
    void setVjugador(int Vjugador) {
        this->njugador = Vjugador;
    }
    Arma* getArma() {
        return this->arma;
    }
};
 
class Batalla {
private:
    Jugador* jug[2];
public:
    Batalla() {
        jug[0] = NULL;
        jug[1] = NULL;
    }
    void LadoDerecho(Jugador* Runiz) {
        this->jug[0] = Runiz;
        cout << this->jug[0]->getNjugador() << " " << this->jug[0]->getVjugador() << " " << this->jug[0]->getArma()->getNarma();
        cout << endl;
    }
    void LadoIzquierdo(Jugador* Anto) {
        this->jug[1] = Anto;
        cout << this->jug[1]->getNjugador() << " " << this->jug[1]->getVjugador() << " " << this->jug[1]->getArma()->getNarma();
    }
};
 
int main() {
    Batalla* batalla = new Batalla();
    Arma* E1 = new Arma("Espada", 10);
    Jugador* Runiz = new Jugador("Vicente", 10000, E1);
    Jugador* Anto = new Jugador("Antonia", 10000, E1);
   // Jugador* Runiz = new Jugador("Vicente", 10000, "Espada", 10);
   // Jugador* Anto = new Jugador("Antonia", 10000, "Espada", 10);
    batalla->LadoDerecho(Runiz);
    batalla->LadoIzquierdo(Anto);
 
    return 0;
}
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
1
Comentar

Problema Métodos y Herencia

Publicado por Vicente (3 intervenciones) el 28/10/2020 16:50:28
Ahí sí, no sabia como poner el método getArma en la clase jugador, me salvaste con esa ayuda. Gracias Nacho.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar