Les Classes Dérivées De C++
Je suis en train de travailler sur un texte de base de jeu pour le plaisir et je suis aux prises avec l'héritage
à partir d'une classe de base. J'ai ma classe de base Being
qui détient tous les résultats
le caractère que j'ai créer. J'ai ensuite une classe Combat
que je veux prendre
toutes les stats de Being
(Ou d'un Être et la passer dans le combat?) et ne
tout le combat de trucs. Mais je ne suis pas tout à fait de la compréhension de l'héritage, ou au moins
comment déclarer les fonctions dans Main
pour le faire fonctionner. Si je continue à l'attaque
fonction dans Being
, je peux juste écrire cette ligne principale:
human.attack(monster);
Mais après le partage de la combattre dans une autre classe, je ne suis pas sûr de la façon d'écrire
qui en principal de sorte qu'il fonctionne. Merci & merci pour votre aide!
class Being //Base Class
{
public:
string name, nameSpecialAttack; //Implement a special attack feature,
//that has a specific mutliplier #
//unique to each being
int attackBonus, attackMod; //was a float attackMod method for casting
//spells that double or halve a Being’s
//attack power.
int baseDamage; //base damage
int health, healthMax; //current health and max health
int mp, mpMax; //current mp and max mp
int arrows; //change to [ranged?] ammo
Being(); //Default Constructor
Being(string name, string nameSpecialAttack, int attackBonus,
int attackMod, int baseDamage, int health, int healthMax,
int mp, int mpMax, int arrows); //Constructor 2
//All my set and get functions
}
Puis ma classe dérivée:
class Combat : public Being
{
private:
public:
void attack(Being& target);
};
Combat.cpp:
void Combat::attack(Being& target)
{
//unsigned seed = time(0);
//srand(seed);
//Rand # 0-99, * damage+1, /100, * attackMod, parse to int.
int damage = (int)(attackMod*( ( (rand()%100)*(baseDamage+1) /100) + attackBonus + (rand()%2)));
target.health -=damage;
cout << name << " attacks " << target.name << " doing " << damage << " damage!" << endl;
cout << target.name << "'s health: " << target.health << endl;
//Use getHealth() instead and put this function there
if(target.health <= 0)
{
cout << endl << name << " killed " << target.name << "! You have won the game! " << endl << endl;
cout << "Terminating AMnew World, Good Bye.\n" << endl << endl;
exit(0);
}
}
Principal:
Being human("", "FirstofFurry", 2, 1, 2, 50, 50, 20, 30, 7); //A thing of
//class Being
Being monster("Armored Goblin", "Rawr", 2, 1, 2, 65, 59, 20, 20, 6);
int main()
{
human.attack(monster); //No longer works since attack is in
//combat class now
Sleep(3000);
cout << endl << endl;
monster.attack(human);
}
- Ce ne devrait probablement pas être une relation d'héritage. Diriez-vous d'un "Combat" est une sorte de "Être"? J'en doute.
- J'ai le sentiment que le "Combat" est l'abréviation de "quelque chose qui peut engager le combat".
- Oui je pense que le Combat de classe est inutile ici, la méthode pourrait être en Cours de
- Je ne sais pas pourquoi, que ce principe de base glissé mon esprit. Merci à vous tous pour me droite, qui a rendu les choses beaucoup plus facile quand j'ai arrêté de penser comme cela.
Vous devez vous connecter pour publier un commentaire.
Ce ne serait pas quelque chose que vous voulez avoir un héritage, le combat ne serait pas un type d'être. Par exemple une pomme, c'est une sorte de fruit, un fruit de la classe de base et de la pomme de la classe dérivée devrait être logiquement correcte. Je recommande la création d'un Ennemi de classe et d'une classe de Héros, qui découlent des monstres comme les zombies et les ninjas hors de l'ennemi.
Il ne semble pas comme vous êtes en tirant parti de l'héritage correctement ici, à moins que les conditions suivantes sont vraies:
Dans votre jeu, il y a une distinction entre les êtres qui peuvent attaquer, et les êtres qui cant. Cela étant dit, de changer ce que votre hiérarchie d'héritage pourrait être utile.
Envisager de faire le "type" d'être ce que vous héritez que.
Ex:
Pourquoi ne pas vous déclarer
human
pour être de typeCombat
à la place?Il a toujours accès à toutes les méthodes publiques/données de
Being
, mais peut aussi utiliser lesCombat
seuleattack
méthode.