Foros del Web » Programación para mayores de 30 ;) » C/C++ »

Duda Herencia

Estas en el tema de Duda Herencia en el foro de C/C++ en Foros del Web. Bueno, soy novato en C++, asi que me surgió una duda sobre la herencia, y como usar una clase heredada de la siguiente forma que ...
  #1 (permalink)  
Antiguo 06/09/2009, 09:51
Avatar de Parra26  
Fecha de Ingreso: septiembre-2009
Mensajes: 1
Antigüedad: 14 años, 8 meses
Puntos: 0
Duda Herencia

Bueno, soy novato en C++, asi que me surgió una duda sobre la herencia, y como usar una clase heredada de la siguiente forma que voy a explicar.

Yo tengo una clase llamada animal (clase base) y de esta derivan dos clases, perro y gato.

Cuando creo un animal, entonces tengo un procedimiento que elige, si ese animal es perro o gato, mediante un puntero a una clase. Y a partir de ahi puedo manejar como quiera esta clase y el tipo de animal.

El uso seria, manejar la clase animal con su tipo (perro o gato), y el tipo seria como por ejemplo el nombre, una propiedad que tiene la clase animal.

No se si me expliqué bien, pero bueno..

Y a continuación el codigo que yo tengo hecho.. es simple, se trata de la clase base (en este caso envez de llamarse animal, se llama Character, y las clases que derivan son NPC y Player)

Characters.h
Código:
#pragma once

#include <string.h>

class Character
{
public:

	int ID;
	char Name[128], Description[256];

	Character(void)
	{
		ID = -1;
		Name[0] = '\0';
		Description[0] = '\0';

		Pos.Map = 0, Pos.X = 0, Pos.Y = 0;
	}

	virtual ~Character(void)
	{
	}

	inline void Init( unsigned int _Index, const char * _Name, const char * _Description )
	{
		ID = _Index;
		strcpy_s(Name, sizeof(Name), _Name);
		strcpy_s(Description, sizeof(Description), _Description);
	}

	inline void ChangeDesc( char * _Description )
	{
		strcpy_s(Description, sizeof(Description), _Description);
	}

protected:

	/* Position point */
	struct Position {
		short Map, X, Y;
	}; Position Pos;

};

class CharacterManage
{
public:

	static const int CharacterMax = 3000;
	int CharacterLast;

	CharacterManage(void)
	{
		CharacterLast = 0;
	}

	virtual ~CharacterManage(void)
	{
	}

	inline Character * GetAt( unsigned int _Index )
	{
		return &CharacterList[ _Index ];
	}
	
	inline int CharacterNextOpen()
	{
		for (unsigned int i = CharacterLast; i < CharacterMax; i++)
		{
            if (CharacterList[i].ID == -1)
			{
				CharacterLast++;
                return i;
			}
		}
        
		return -1;
	}

	inline void CharacterErase( unsigned int _Index )
	{
		// Protocol.HandleRemoveChar(CharacterList[_Index].ID);	

		CharacterList[_Index].ID = -1;
		CharacterList[_Index].Name[0] = '\0';
		CharacterList[_Index].Description[0] = '\0';

		if (_Index == CharacterLast)
		{
			while (CharacterList[CharacterLast].ID > -1)
			{
				if (CharacterLast <= 1)
				{
					return;
				}
				
				CharacterLast--;
			}
		}

	}
protected:
	Character CharacterList[CharacterMax];
};
Uso una clase para manejar la otra clase..

No se si es correcto el planteamiento que hice sobre mi idea del codigo, asi que me gustaria que me ayudaran con esto. Tampoco se si es correcto hacer todo en el .h, pero como dije, recien comienzo a programar en C++...

Ah y aqui el ejemplo de como lo uso:
Código:
#include "stdafx.h"
#include "Characters.h"

using namespace std;

int _tmain(int argc, _TCHAR* argv[])
{
	CharacterManage * myCharManage = new CharacterManage();
	
	int Indice = myCharManage->CharacterNextOpen();

	Character * Char = myCharManage->GetAt(Indice);

	Char->Init(Indice, "Parra", "myDesc");

	//cout << "ID: " << Char->ID << " Name: " << Char->Name << " Desc: " << Char->Description << endl;

	delete myCharManage;

	cout << "Press enter key to exit..." << endl;
	cin.get();
	return 0;
}
Muchas gracias a todos por adelantado ^^
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 06:26.