2011-03-15 15 views
19

Alt sınıflama/mirastan söz ederken bazen C++ örneklerini görüyorum, temel sınıf sanal anahtar kelimeye sahip ve bazen geçersiz kılınmış işlev de sanal anahtar kelimeye de sahip, neden bazen sanal anahtar sözcüğün alt sınıfa eklenmesi gerekiyor? Örneğin :neden bazen geçersiz anahtar sözcüğe geçersiz kılınmalı?

class Base 
{ 
    Base(){}; 
    virtual void f() 
    ...... 
    } 
}; 

class Sub : public Base 
{ 
    Sub(){}; 
    virtual void f() 
    ...new impl of f() ... 
    } 
}; 
+5

olmayacağını belirtiyor? Bu adil bir soru ... – Nim

+2

http://stackoverflow.com/questions/4024476/should-methods-that-implement-pure-virtual-methods-of-an-interface-class-be-decla/ Doğru anladım. –

+0

Türetilmiş sınıflardaki işlevler için [C++ "sanal" anahtar kelimesinin olası kopyası. Gerekli mi?] (Https://stackoverflow.com/questions/4895294/c-virtual-keyword-for-functions-in-derived-classes-is-it-necessary) – Satrapes

cevap

28

Bu gerekli değildir, ancak sadece türetilmiş sınıf tanımını görürseniz okunabilirliği yardımcı olur.

§10.3 [class.virtual]/3

sanal elemanı işlevi vf bir sınıf temel ve türetilmiş bir sınıfta bildirilen ise, baz ile bir üye işlevi vf doğrudan veya dolaylı olarak elde edilen Aynı ad ve Base :: vf olarak aynı parametre listesi, sonra Türetilmiş :: vf de sanal (bu yüzden bildirilmiş olsun ya da olmasın) ve 97) Base :: vf geçersiz kılar. neden bu soru aşağı oylanır -

Nerede dipnot 97) temelde argüman listesi farklıysa, fonksiyon geçersiz kılma ne de ille ben alamadım virtual

İlgili konular