Video: Virtual Functions in C++ 2024
C ++ 'daki bir soyut sınıf, bir veya daha fazla saf sanal fonksiyona sahip bir sınıftır. saf sanal işlevi, uygulanması olmayan olarak işaretlenmiş sanal üye işlevidir. Büyük olasılıkla hiçbir uygulama bulunmamaktadır çünkü herhangi bir temel sınıf da dahil olmak üzere sınıfta verilen bilgilerle uygulanması mümkün değildir.
Geleneksel olarak işleyen, saf olmayan sanal bir işlev, somut bir işlev olarak bilinir (somut bir işlevin sanal olabileceğine dikkat edin - ne yazık ki, C ++ bu terimi polimorfik anlamı için kullanır.
Bir işlevin saf sanal olarak bildirilmesine ilişkin sözdizimi aşağıdaki sınıf Hesapta gösterilir:
// Hesap - bu sınıf soyut bir sınıf sınıfıdır Hesap {public: Hesap (imzasız accNo, double initialBalance = 0. 0); // fonksiyonlara erişin unsigned int accountNo (); double acntBalance (); statik int noAccounts (); // işlem fonksiyonları void deposit (double amount); // aşağıdaki saf bir sanal işlevdir sanal ikame miktarı (çift miktar) = 0; protected: // hesapları bağlantılı bir listede tutmak, böylece hesap sayısı için herhangi bir sınır yoktur // statik int sayımı; // hesaba imzalanmamış accountNumber; çift bakiye;};
Çekilme bildirimi () sonrasında = 0 programcının bu işlevi tanımlamayı amaçlamadığını belirtir. on alt sınıfların yer tutucudur. Hesap alt sınıflarının bu işlevi somut bir işlevle geçersiz kılması beklenir. Programcı, saf sanal olarak bildirilmeyen her bir üye işlev için bir uygulama sağlamalıdır.
Bazı programcılar bu gösterimi aptalca düşünüyor. Ama burada kalmak için, sadece onunla yaşamayı öğrenmek zorundasın. Tam olarak bir gerekçe olmasa da, bu gösterim için bir sebep var. Her sanal işlev özel bir tabloya girmelidir.
Bu girdi, işlevin adresini içerir. Muhtemelen, en azından bir kerede, salt sanal bir işlevin girişi 0'dır. Her durumda, şu anda sıkıştığınız sözdizimi budur.
Soyut bir sınıf bir nesneyle örnek alınamaz; Yani soyut bir sınıfın dışında bir nesne oluşturamazsınız. Örneğin, aşağıdaki bildirim yasal değildir:
void fn () {// 100 dolara Account acnt (1234, 100.00) ile bir hesap bildirin; // Bu yasal değildir. geri çekme (50); // ne beklersiniz?} // bu çağrı yapmalısınız?
Bildirime izin verilirse, sonuçta ortaya çıkan nesne eksik olabilir ve bazı yetenekleri yoktur. Örneğin, önceki çağrı ne yapmalı? Unutma, Hesap yok: çekilme () yok.
Soyut sınıflar, diğer sınıflar için taban sınıfları olarak hizmet eder. Hesap genel bir banka hesabı ile ilişkili tüm özellikleri içerir. Hesaptan devralarak diğer banka hesapları türlerini oluşturabilirsiniz.
Teknik terim ile örneği oluşturmaktır. Hesap sınıfının bir nesneyle örneklenemediğini veya belirli bir nesne Tasarruf sınıfının örneğini verdiğini söylüyorsunuz.