CPP 048 – Virtual Functions

Aşağıda A ve B olmak üzere iki sınıf var. B, A’dan miras alıyor. Daha sonra her ikisine de f() fonksiyonunu ekliyoruz.

#include <iostream>
using namespace std;


class A {
public:
	void f() {
		cout << "A::f()" << endl;
	}
};

class B :public A {
public:
	void f(){
		cout << "B::f()" << endl;
	}
};

int main() {
	A a;
	B b;

	A* ptr;

	ptr = &a;
	ptr->f(); // A::f()

	ptr = &b;
	ptr->f(); // A::f()
}

A türüne ait bir pointer oluşturup sırasıyla a ve b nesnelerini atayıp f() fonksiyonunu çağırınca Base class’a ait f() fonksiyonu çalıştı.

A sınıfına ait bir nesne için A::f() basması gayet mantıklı fakat B sınıfına ait bir nesne için A::f() yerine B::f() fonksiyonunun çalışmasını isteyebiliriz. Böyle bir durumda virtual function ‘ları kullanıyoruz.

Bir fonksiyonu virtual yapmak için başına virtual keyword’ünü ekliyoruz:

virtual void f()

Daha sonra derived class içinde f fonksiyonunu yazarken override keyword’ü ile base class a ait f() fonksiyonunu eziyoruz.

void f() override

Tam olarak şöyle olmalı:

#include <iostream>
using namespace std;


class A {
public:
	virtual void f() {
		cout << "A::f()" << endl;
	}
};

class B :public A {
public:
	void f() override{
		cout << "B::f()" << endl;
	}
};

int main() {
	A a;
	B b;

	A* ptr;

	ptr = &a;
	ptr->f(); // A::f()

	ptr = &b;
	ptr->f(); // B::f()
}

Dikkat ederseniz burada B sınıfına ait bir nesneyi A türüne ait bir pointera atayıp f() fonksiyonunu çağırdığımızda B::f() gelmektedir.


Comments

Leave a Reply

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