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:
Uso una clase para manejar la otra clase..#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]; };
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:
Muchas gracias a todos por adelantado ^^ #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; }