Tavsiye, 2024

Editörün Seçimi

C ++ 'da İşlev Aşırı Yüklemesi ve Geçersiz Kılma Arasındaki Fark

Polimorfizm, OOP'nin en önemli özelliklerinden biridir. Bu sadece 'çoklu formlar için bir isim kullanmak' anlamına geliyor. Polimorfizm, 'işlev aşırı yüklenmesi', 'operatör aşırı yüklenmesi' ve 'sanal işlev' kullanılarak uygulanabilir. Hem “aşırı yükleme” hem de “baskın” polimorfizm kavramını ifade eder. Burada “aşırı yükleme” derleme zamanı polimorfizmidir ve “geçersiz kılma” çalışma zamanı polimorfizmidir. Daha fazla çalışmak, eğer 'aşırı yükleme' ve 'geçersiz kılma' arasındaki ana farktan bahsedersek. “Aşırı yükleme” de, aşırı yüklenmiş fonksiyonları aynı fonksiyon ismi ile fakat farklı sayıda ve parametre tipi ile yeniden tanımlıyoruz. Geçersiz kılma fonksiyonunun 'geçersiz kılmasında' prototip program boyunca aynıdır, ancak geçersiz kılınacak fonksiyon, temel sınıftaki 'sanal' anahtar kelimesinden önce gelir ve herhangi bir anahtar kelime olmadan türetilmiş sınıf tarafından yeniden tanımlanır.

Dahası, bir karşılaştırma çizelgesi yardımıyla aşırı yükleme ve geçersiz kılma arasındaki farkı inceliyoruz.


Karşılaştırma Tablosu:

Karşılaştırma için temelfazla yüklemeağır basan
PrototipPrototip sayısı veya parametre tipi olarak farklılık gösterebilir.Prototipin tüm yönleri aynı olmalıdır.
KelimelerAşırı yükleme sırasında anahtar kelime uygulanmamıştır.Geçersiz kılınacak işlev, temel sınıfta 'sanal' anahtar sözcüğünden önce gelir.
Ayırt edici faktörAranan fonksiyonun versiyonunu belirleyen parametre sayısı veya tipi farklılık gösterir.İşaretçi tarafından hangi sınıfın fonksiyonunun çağrıldığı, hangi sınıfın nesnesinin o işaretçiye atandığı adresi tarafından belirlenir.
Desen tanımlamaİşlev aynı isimde, fakat farklı sayı ve parametre tipinde yeniden tanımlandı.İşlev, ana sınıfta 'sanal' anahtar sözcüğünden önce tanımlanır ve türetilmiş sınıf tarafından out anahtar sözcüğüyle yeniden tanımlanır.
Başarı zamanDerleme zamanı.Çalışma zamanı.
Yapıcı / Sanal işlevYapıcılar aşırı yüklenebilir.Sanal işlev geçersiz kılınabilir.
çöp yakma fırını
Yıkıcı aşırı yüklenemez.Yıkıcı geçersiz kılınabilir.
bağlayıcıAşırı yükleme erken bağlama sağlar.Geçersiz kılma, geç bağlanma anlamına gelir.

Aşırı Yüklemenin Tanımı

Derleme zamanı polimorfizmine “aşırı yükleme” denir. Aşırı yükleme, bir polimorfizm kavramından kaynaklandığı için, “çoklu yöntemler için ortak bir arayüz” sağlar. Bu, eğer bir fonksiyon aşırı yüklenirse, yeniden tanımlanırken aynı fonksiyon adını içerir.

Aşırı yüklenmiş fonksiyonlar, farklı 'sayı veya parametre türü (ler)' e göre farklılık gösterir, bir aşırı yüklenmiş fonksiyonu diğerinden farklı kılar. Bu şekilde, derleyici hangi aşırı yüklü fonksiyonun çağrıldığını tanır. En yaygın aşırı yüklenmiş fonksiyonlar 'yapıcılar' dır. 'Kopya kurucu' bir tür “kurucu aşırı yüklemesi” dir.

C ++ 'da aşırı yükleme uygulaması

 sınıf aşırı yükü {int a, b; public: int yük (int x) {// ilk yük () işlevi a = x; a dönüş; } int yük (int x, int y) {// second load () işlevi a = x; b = y; a * b döndür; }}; int main () {aşırı yük O1; O1.load (20); // first load () işlev çağrısı O1.load (20, 40); // second load () işlev çağrısı} 

Burada sınıf aşırı yük fonksiyon yükü () aşırı yüklenmiştir. Sınıfın aşırı yüklenmiş iki işlevi, ilk load () işlevinin yalnızca tek tamsayı parametresini kabul ettiği şekilde ayırt edilebilir, ikinci load () işlevi iki tamsayı parametresini kabul eder. Aşırı yük sınıfının nesnesi, tek bir parametreyle load () işlevini çağırdığında, ilk load () işlevi çağrılır. Nesne iki parametreyi geçen load () işlevini çağırdığında, ikinci load () işlevi çağrılır.

Overriding'un tanımı

Çalışma süresi boyunca elde edilen polimorfizm 'geçersiz kılma' olarak adlandırılır. 'Miras' ve 'sanal fonksiyonlar' kullanılarak gerçekleştirilir. Geçersiz kılınacak işlev, bir temel sınıftaki 'sanal' anahtar sözcüğünden önce gelir ve herhangi bir anahtar sözcük olmadan türetilmiş bir sınıfta yeniden tanımlanır.

Geçersiz kılma durumunda hatırlanması gereken en önemli şeylerden biri, geçersiz kılma işlevinin prototipinin türetilmiş sınıf yeniden tanımlanırken değişmemesi gerektiğidir. Geçersiz kılma işlevi bir çağrı verildiğinde, C ++, işlev çağrısının yapıldığı 'işaretçi tarafından gösterilen nesnenin türüne' göre hangi sürümün çağrılacağını belirler.

C ++ 'da Geçersiz Kılma Uygulaması

 class base {public: virtual void funct () {// base class cout'un sanal işlevi << "Bu bir base class'ın funct () işlevidir"; }}; türetilmiş1: public base {public: void funct () {// türetilmiş1 sınıfında yeniden tanımlanmış taban sınıfının sanal işlevi << "Bu türetilmiş bir 1 sınıfının işlevidir ()"; }}; türetilmiş2: genel taban {public: void funct () {// türetilmiş sınıf 2 sınıfında yeniden tanımlanmış temel sınıfın sanal işlevi  fonksiyonu (); // türetilmiş1 sınıf funct () çağrısı. * P = ve d2; p> fonksiyonu (); // türetilmiş2 sınıfına çağrı funct (). 0 döndür; } 

Burada, genel olarak iki türetilmiş sınıf tarafından miras alınan tek bir temel sınıf var. Sanal bir işlev 'sanal' anahtar kelimesi olan bir temel sınıfta tanımlanır ve anahtar kelime içermeyen her iki türetilmiş sınıf tarafından da yeniden tanımlanır. Main () işlevinde, taban sınıfı 'p' işaretçi değişkenini ve 'b' nesnesini oluşturur; 'türetilmiş1 ′ sınıfı bir nesne d1 oluşturur ve türetilmiş2 sınıfı d2 nesnesi oluşturur'.

Şimdi, başlangıçta, temel sınıfın 'b' nesnesinin adresi, 'p' temel sınıfının işaretçisine atanır. 'p', funct () işlevine çağrı yapar, dolayısıyla temel sınıfın bir işlevi çağrılır. Daha sonra türetilmiş1 sınıf nesnesinin adresi 'd1' 'p' göstergesine atanır, yine funct (); burada, türetilen1 sınıfının funct () işlevi çalıştırılır. Son olarak, 'p' işaretçisi türetilmiş 2 sınıfın nesnesine atanır. Daha sonra 'p', türetilmiş sınıfın func () işlevini yerine getiren funct () işlevini çağırır.

Türetilmiş1 / türetilmiş 2 sınıfı funct () işlevini yeniden tanımlamazsa, sanal işlev 'hiyerarşik' olduğu için temel sınıfın funct () adı verilir.

Aşırı Yüklenme ve Aşırı Yüklenme Arasındaki Temel Farklılıklar

  1. Aşırı yüklenen bir fonksiyonun prototipi, aşırı yüklenen fonksiyona geçirilen parametrenin tipi ve sayısı nedeniyle farklılık gösterir. Öte yandan, geçersiz kılınan işlevin prototipi değişmez çünkü geçersiz kılınan bir işlev, ait olduğu farklı sınıf için farklı eylemler gerçekleştirir, ancak aynı tür ve sayıda parametre ile.
  2. Aşırı yüklenen fonksiyon ismi herhangi bir anahtar kelimeden önce gelmezken, geçersiz kılma fonksiyonunun ismi sadece temel sınıftaki “Sanal” anahtar kelimesinden önce gelir.
  3. Hangi aşırı yüklenme işlevinin çağrıldığı, işleve iletilen parametrenin türüne veya sayısına bağlıdır. Hangi sınıfın çağrıldığı geçersiz kılma işlevi, hangi sınıfın nesne adresinin işaretçiye atandığını ve işlevi çağırdığına bağlıdır.
  4. Derleme süresi boyunca hangi aşırı yüklenme fonksiyonunun çağrılacağı çözülür. Çalıştırılması sırasında hangi geçersiz kılınacak işlevi çözülür.
  5. Yapıcılar aşırı yüklenebilir, ancak geçersiz kılınamaz.
  6. Yıkıcılar aşırı yüklenemez, ancak geçersiz kılınabilirler.
  7. Aşırı yükleme, derleme süresi boyunca aşırı yüklenmiş fonksiyonun çağrılacağı gibi erken bağlama sağlar. Geçersiz kılma, geçersiz kılma işlevinin çağrılacağı gibi çalışma süresi boyunca çözüldüğü için geç bağlama işlemini gerçekleştirir.

benzerlikler

  1. Her ikisi de bir sınıfın üye işlevlerine uygulanır.
  2. Polimorfizm, ikisinin de arkasındaki temel kavramdır.
  3. İşlevlere aşırı yükleme ve geçersiz kılma uygularken işlev adı aynı kalır.

Sonuç

Aşırı yükleme ve geçersiz kılma benzer görünüyor, ancak durum böyle değil. İşlevler aşırı yüklenebilir, ancak gelecekte herhangi bir sınıf aşırı yüklenmiş işlevi yeniden tanımlayamaz. Sanal işlev aşırı yüklenemez; sadece geçersiz kılınabilirler.

Top