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() overrideTam 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.

Leave a Reply