CPP 046 – Inheritance 

Bir oyun yaptığımızı düşünelim. Oyunumuzda düşman NPC’lerin olmasını istiyoruz. Kodlamaya başladık 1 düşman için bir sınıf yazdık, 2. düşman türü için bir sınıf, 3. düşman türü için bir sınıf derken belli bir süre sonra şunu farkediyoruz. Düşman NPC’ler birbirinden ne kadar farklı olsa da aslında hepsi aynı temel özelliklere sahip:

  • Hasar alma
  • Hasar verme
  • Can
  • Hız

Aynı şeyleri tekrar tekrar yazmanın hiçbir anlamı yok. Öncelikle temel özelliklerimizi bir sınıfta toplayalım.

class NPC {
public:
	float can;
	float saldiri_puani;

	NPC() :can{}, saldiri_puani{} {}
	NPC(float can, float saldiri_puani) :can{ can }, saldiri_puani{ saldiri_puani } {}


	void hasar_al(float hasar_miktari) {
		can -= hasar_miktari;
	}
	float hasar_ver() {
		return saldiri_puani;
	}
};

Daha sonra başka bir sınıfta bir düşman türünün kendine has özelliklerini ekleyelim.

class ElmaCanavari {
public:
	void elmaYe() {
		cout << "hart, hurt" << endl;
	}
};

ElmaCanavarının kendi has özelliklerini tanımladık. Şimdi istediğimiz NPC sınıfının özelliklerini de miras alsın. Bunun için şöyle bir hamel yapıyoruz:

class ElmaCanavari : public NPC {
public:
	void elmaYe() {
		cout << "hart, hurt" << endl;
	}
};

Sınıfımızın adının sonuna : public NPC yazdık. Böylece ElmaCanavari sınıfı NPC sınıfından miras almış oldu. Artık ElmaCanavari sınıfına ait bir objeyi vasıtasıyla NPC’nin özelliklerini kullanabiliriz:

int main() {
	ElmaCanavari e1;
	e1.can = 500; 
	e1.hasar_al(100);
	cout << e1.can << endl; // 400

	e1.elmaYe(); // hart, hurt
}

Kodun tümü:

#include <iostream>
using namespace std;

class NPC {
public:
	float can;
	float saldiri_puani;

	NPC() :can{}, saldiri_puani{} {}
	NPC(float can, float saldiri_puani) :can{ can }, saldiri_puani{ saldiri_puani } {}


	void hasar_al(float hasar_miktari) {
		can -= hasar_miktari;
	}
	float hasar_ver() {
		return saldiri_puani;
	}
};


class ElmaCanavari : public NPC {
public:
	void elmaYe() {
		cout << "hart, hurt" << endl;
	}
};



int main() {
	ElmaCanavari e1;
	e1.can = 500; 
	e1.hasar_al(100);
	cout << e1.can << endl; // 400

	e1.elmaYe(); // hart, hurt
}

Comments

Leave a Reply

Your email address will not be published. Required fields are marked *