Classi base e derivate

Esempio di classe base (Character) e classe derivata (Creature).
La classe base è astratta perchè contiene una funzione virtuale pura (Jump).
La funzione Jump deve quindi essere implementata nelle classi derivate.

Header file classe base Character

Character.h

#pragma once

#include <string>
using namespace std;

class Character
{
public:
	Character();
	virtual ~Character();
	void walk();
	virtual void jump() = 0;

private:
	string name;
	int hp;
	int ap;
};

Source file classe base Character

Character.cpp

#include <iostream>
#include "Character.h"

using namespace std;

Character::Character()
{
	name = "Character";
	hp = 100;
	ap = 10;

	cout << "Costruttore classe base" << endl;
}

Character::~Character() 
{
	// virtuale
}

void Character::walk()
{
	// classe base walk
	cout << "Classe base Character, funzione walk" << endl;
}

void Character::jump()
{
	// virtuale pura
}

Header file classe derivata Creature

Creature.h

#pragma once

#include "Character.h"

class Creature : public Character
{
public:
	Creature();
	~Creature();
	void jump() override;
};

Source file classe derivata Creature

Creature.cpp

#include <iostream>
#include "Creature.h"

using namespace std;

Creature::Creature()
{
	string name = "Creatura 1";
	int hp = 200;
	int ap = 50;

	cout << "Costruttore classe derivata" << endl;
}

Creature::~Creature()
{
	string name = "Creature dead";
	int hp = 0;
	int ap = 0;
}

void Creature::jump()
{
	// classe derivata jump
	cout << "Classe derivata Creature, funzione jump" << endl;
}

TestClassi.cpp

#include <iostream>
#include "Creature.h"

using namespace std;

int main()
{
	Creature creature;
	
	creature.jump();
	creature.walk();

	system("pause");
	return 0;
}

Output del programma:
Costruttore classe base
Costruttore classe derivata
Classe derivata Creature, funzione Jump
Classe base Character, funzione Walk