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

Yazar: Laura McKinney
Yaratılış Tarihi: 1 Nisan 2021
Güncelleme Tarihi: 12 Mayıs Ayı 2024
Anonim
C ++ 'da İşlev Aşırı Yüklemesi ve Geçersiz Kılma Arasındaki Fark - Teknoloji
C ++ 'da İşlev Aşırı Yüklemesi ve Geçersiz Kılma Arasındaki Fark - Teknoloji

İçerik


İçinde 'aşırı yüklemeThe Aşırı yüklenmiş işlevleri, aynı işlev adına sahip ancak farklı sayıda ve türde parametre ile yeniden tanımlıyoruz. İçinde 'ağır basanOver geçersiz kılma işlevinin prototipi program boyunca aynıdır, ancak geçersiz kılınacak işlev 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.

Polimorfizm, OOP'nin en önemli özelliklerinden biridir. Bu sadece “birden fazla form için bir ad kullanma” anlamına gelir. Polimorfizm, "işlev aşırı yüklenmesi", "operatör aşırı yüklenmesi" ve "sanal işlev" kullanılarak gerçekleştirilebilir. Her ikisi de, “aşırı yükleme” ve “geçersiz kılma”, polimorfizm kavramını ifade eder. Burada “aşırı yükleme”, zaman polimorfizmini derler ve “geçersiz kılma”, çalışma zamanı polimorfizmini ifade eder. “Aşırı yükleme” ve “geçersiz kılma” konusundaki ana farktan bahsedersek daha fazla çalışın.


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

  1. Karşılaştırma Tablosu
  2. Tanım
  3. Anahtar Farklılıklar
  4. benzerlikler
  5. Sonuç


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.
KelimeAşı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ükten ö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ıflar fonksiyonunun çağrıldığı, hangi sınıflayıcı nesnenin o işaretçiye atandığı adres tarafından belirlenir.
Desen tanımlamaİşlev aynı isimde, fakat farklı sayı ve parametre tipinde yeniden tanımlandı.İşlev, ana sınıfta sanal bir anahtar sözcük tarafından önce tanımlanır ve out anahtar sözcüğü ile türetilmiş sınıf tarafından 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üklenme polimorfizm kavramından üretildiği 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 tür parametre (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 sık 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ş. 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.

Geçersiz Kılmanın Tanımı

Çalışma süresi boyunca elde edilen polimorfizm, “geçersiz kılma” olarak adlandırılır. Bu, “kalıtım” ve “sanal işlevler” kullanılarak gerçekleştirilir. Geçersiz kılınacak işlev, bir temel sınıftaki "sanal" anahtar kelimesinden önce gelir ve herhangi bir anahtar kelime 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" bağlı olarak işlevin hangi sürümünü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 funct () temel sınıfıdır"; }}; 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ş1 sınıfları funct ()"; }}; sınıf türetme2: public base {public: void funct () {// türetilmiş2 sınıfında yeniden tanımlanmış taban sınıfının sanal işlevi << "Bu, türetilmiş bir 2 sınıfları funct ()"; }}; int main () {base * p, b; türetilmiş 1 d1; türetilmiş2d2; * P = & B; p> fonksiyonu (); // temel sınıf çağrısı funct (). * P = & d1; p> 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 () öğesinde, temel 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ı bir nesne d2 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, bu nedenle temel sınıfın bir işlevi çağrılır.Daha sonra türetilmiş1 sınıf nesnesinin adresi ‘d1‘ ’işaretine atanır, yine funct () işlevini çağırır; Burada, türetilen sınıfı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ş 2 sınıfının funct () işlevini yapan funct () işlevini çağırır.

Türetilen1 / 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.

  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ürde 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şlev çö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ğı zaman çalışma sırasında çö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.