Ev Kişisel Finans C ++ Programlama: Sanal İşlev Ne Zaman Olmaz? - Cümlecikler

C ++ Programlama: Sanal İşlev Ne Zaman Olmaz? - Cümlecikler

Video: C++ Ders3: Fonksiyonlar (2/2) (Ortogon) 2024

Video: C++ Ders3: Fonksiyonlar (2/2) (Ortogon) 2024
Anonim

Belli bir işlev çağrısının geç olduğunu düşünüyorsanız, bunun olduğu anlamına gelmez. Alt sınıflarda aynı argümanlarla bildirilmediyse, üye işlevler, sanal olarak bildirilmiş olsun olmasın, polimorfik olarak geçersiz kılınmaz.

Aynı bildirim kuralı için bir istisna, taban sınıfındaki üye işlev bir işaretçi veya bir temel sınıf nesnesine referans döndürürse, bir alt sınıfdaki bir geçersiz kılınan üye işlev, bir alt sınıfın bir nesnesine bir işaretçi veya referans döndürebilir. Diğer bir deyişle, iki işlevin dönüş türü farklı olmasına rağmen, makeACopy () işlevi polimorfiktir:

class Base {public: // geçerli nesnenin bir kopyasını döndürür Base * makeACopy ();}; class SubClass: public Base {public: // geçerli nesnenin bir kopyasını döndür SubClass * makeACopy ();}; void fn (Taban & bc) {Taban * pCopy = bc. Bir kopyasını çıkarmak(); // devam edin …}

Pratikte, bu oldukça doğal. Bir makeACopy () işlevi, BaseClass:: makeACopy () öğesini geçersiz kılabilse bile, bir SubClass , nesnesi döndürmelidir.

Bu iş sessizce ne zaman bir işlevi geçersiz kılar ve C ++ hata kaynağı değilse; öyle ki 2011 standardı, programcının bir temel sınıf işlevini geçersiz kılmak amacını belirtmek için kullanabileceği tanımlayıcı geçersiz kıl 'ı tanıttı.

C ++, bir işlev geçersiz kılma bildirildi, ancak aslında aşağıdaki örnekte olduğu gibi bir temel sınıf işlevini (örn. Eşleşmeyen bir bağımsız değişken gibi) geçersiz kılarsa bir derleyici hatası üretir: >

sınıf Öğrenci {public: sanal void addCourseGrade (double grade);}; Sınıf Öğrencisi: public Öğrenci {public: sanal void addCourseGrade (float sınıfı) geçersiz kılma;};
Bu parçacık derleme zamanı hatası üretir çünkü GradStudent:: addCourseGrade (float) yöntemi geçersiz kılma olarak bildirilmiştir ancak temel sınıf işlevini Student:: addCourseGrade (double) ile geçersiz kılmaz; çünkü argüman türleri don ' maç.

Programcı,

son anahtar sözcüğünü kullanarak geçersiz kılınamayan bir işlev de ilan edebilir; bu işlev, aşağıdaki ek 'da gösterildiği gibi, bazı önceki temel sınıf işlevini geçersiz kılar bile > PostDoc sınıfı: sınıfı GradStudent: public Öğrenci {public: void addCourseGrade (double grade) final;}; sınıf PostDoc: public GradStudent {public: sanal void addCourseGrade (çift sınıf);}; Öğrenci:: addCourseGrade (),

Öğrenci

yöntemini geçersiz kılmaya çalıştığı için PostDoc:: addCourseGrade () bildirimi bir hata üretir; final , olarak işaretlendiğinden.

Buna ek olarak, bütün bir sınıf ilan edilebilir

final:

sınıf GradStudent final: public Öğrenci Bu sadece sınıfın sanal yöntemlerinden daha fazlasını etkiler.

finali

sınıfı hiç miras alınamaz.

C ++ Programlama: Sanal İşlev Ne Zaman Olmaz? - Cümlecikler

Editörün Seçimi

Kendi Excel 2007 Şablonlarınızı Oluşturun - mankenler

Kendi Excel 2007 Şablonlarınızı Oluşturun - mankenler

Hazır bir Excel 2007 şablonunu bulamazsanız faturaya uyuyor, oluşturduğunuz veya şirketinizin elinde bulunan örnek çalışma kitaplarından kendi şablonlarınızı oluşturuyor. Kendi şablonunuzu oluşturmanın en kolay yolu, gerçek bir çalışma kitabı prototipi oluşturmak ve dosyayı şablon dosyası biçimini kullanarak kaydedin ...

Kendi Excel 2010 Şablonlarınızı Oluşturma - mankenler

Kendi Excel 2010 Şablonlarınızı Oluşturma - mankenler

Hazır Excel 2010 şablonunu bulamazsanız faturaya uyuyor, oluşturduğunuz veya şirketinizin elinde bulunan örnek çalışma kitaplarından kendi şablonlarınızı oluşturuyor. Kendi şablonunuzu oluşturmanın en kolay yolu, gerçek bir çalışma kitabı prototipi oluşturmak ve dosyayı şablon dosyası biçimini kullanarak kaydedin ...

Excel 2007 Grafiğinin Tipini ve Stilini özelleştiren - aumluları

Excel 2007 Grafiğinin Tipini ve Stilini özelleştiren - aumluları

Bir grafik eklediğinizde bir Excel 2007 çalışma kitabı, Şeritte yeni bir Grafik Araçları Tasarım sekmesi görüntülenir. Grafik türünü ve stilini özelleştirmek için Grafik Araçları Tasarım sekmesindeki komut düğmelerini kullanabilirsiniz. Tasarım sekmesi aşağıdaki düğme gruplarını içerir: Tür grubu Değiştir Grafik Türü ...

Editörün Seçimi

ÜÇüncü Temel, Çalınma Evini ve Diğer Beyzbol Beyitlerini Çalın

ÜÇüncü Temel, Çalınma Evini ve Diğer Beyzbol Beyitlerini Çalın

ÜÇüncü temel çalmak genellikle ikinci çalmaktan daha kolaydır. Birçok atış çizmeden ilk önce olduğundan daha büyük bir yol alabilirsin. Zamanlamanız iyi ise, atıcı topu bırakmadan önce saniyelerden de çıkabilirsiniz. Sürahi genellikle koşucuları ikinci sıradan seçmek daha zor olur ...

Basketbol Takımınızda Bir Balo Domuzuyla

Basketbol Takımınızda Bir Balo Domuzuyla

Balo domuzu - asılı bir oyuncu uzun süreler boyunca topa vurur ve geçmek yerine her yere ateş etmeyi amaçlar - tüm takım için gerçek sorunlar yaratır. Örneğin, topu domuzu, takımın moralini zayıflatan ve öldüren puan almaya çalışan açık takım arkadaşlarını görmezden gelir ...

Editörün Seçimi

Canon EOS 6D'ye Yazar Adı Nasıl Eklenir Canon EOS 6D'ye Yazar Adı Nasıl Eklenir

Canon EOS 6D'ye Yazar Adı Nasıl Eklenir Canon EOS 6D'ye Yazar Adı Nasıl Eklenir

Adınızı aşağıdaki gibi ekleyebilirsiniz: Canon'la çektiğiniz her görüntünün yazarı. Bilgiler, çektiğiniz her resme EXIF ​​verisi olarak eklenir. Yazar bilgilerinizi kameraya kaydetmek için: Menü düğmesine basın. Daha önce kullanılan menü görüntülenir. Kamera Ayarları ... 4 ...

Rebel T6i / 750D'den Görüntülere Nasıl Temizleme Talimatları Ekleyeceksiniz - mankenler

Rebel T6i / 750D'den Görüntülere Nasıl Temizleme Talimatları Ekleyeceksiniz - mankenler

Küçük noktalar görüntülerinizde tutarlı bir şekilde görünüyorsa ve Rebel T6i / 750D'nin lensindeki kirin nedeni değilse - sensörünüzün temizlemeye ihtiyacı olabilir. Sensörü kendiniz temizlemeyin, çünkü ne yaptığınızı bilmiyorsanız makinenizi kolayca mahvedebilirsiniz. Bunun yerine, fotoğraf makinesini çekin ...