Örneğimize geçmeden önce pure virtual destructordan bahsetmek istiyorum.Bunu destructorın başına virtual kelimesini getirerek yapıyoruz.Amaç ise destructoru pure virtual destructor olan ana sınıfımızdan oluşturulan bir pointer silinirken önce işaret ettiği nesnenin destructorı,çağrılır,sonrada kendi destructorı.
İşte basit bir örnek...
#include<iostream>
using namespace std;
class Base
{
public:
Base()
{
cout<<"Constructor of Base"<<endl;
}
virtual void f()=0; // f() fonksunu pure virtual functiondur.
void g()
{
cout<<"Base::g()"<<endl;
}
virtual ~Base() // Destructorda virtual tanımlanmıştır.
{
cout<<"~Base()"<<endl;
}
};
class Derived:public Base
{
public:
Derived()
{
cout<<"Contructor of Derived"<<endl;
}
void f()
{
cout<<"Derived::f()"<<endl;
}
virtual ~Derived()
{
cout<<"~Derived()"<<endl;
}
};
int main()
{
//Base b; hatalı kullanım çünkü Base abstractır ve abstract sınıftan nesne oluşturulamaz.
Base *ptr; //Base tipinde pointer oluşturdum.
ptr=new Derived; // ptr pointerı Derivedden oluşturulan nesnenin adresini işaret eder.
ptr->f(); //Derived::f() çağrılır.
ptr->g();// Derivedda olmadığı için Base deki g() çağrılır.
delete ptr;
system("pause");
return 0;
}
Program çıktısı şu şekilde olur...
Hiç yorum yok:
Yorum Gönder