Soru Alt sınıflama yaparken c ++ 'da bazen neden sanal işleve geçersiz kılınmalı?


Alt sınıflama / devralma hakkında konuşurken C ++ örneklerinde neden bazen görüyorum, temel sınıf sanal anahtar kelimeye sahiptir ve bazen geçersiz kılınmış işlev de sanal anahtar kelimeye de sahiptir, neden bazen sanal anahtar sözcüğün alt sınıfa eklenmesi gerekir? Örneğin:

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

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

21
2018-03-15 08:55


Menşei


Kinda kopyası stackoverflow.com/questions/4024476/... eğer doğru anladıysam. - Kiril Kirov
Olası kopya Türetilmiş sınıflardaki işlevler için C ++ "sanal" anahtar sözcüğü. Bu gerekli? - Satrapes
Satrapes'in sağladığı link bu soru için daha iyi bir kaynak olacaktır. - Niing


Cevaplar:


Gerekli değildir, ancak yalnızca türetilmiş sınıf tanımını görüyorsanız okunabilirliğe yardımcı olur.

§10.3 [class.virtual] / 3

Bir sanal üye işlevi vf, bir Sınıf Tabanı'nda ve bir Base'den türetilmiş, doğrudan veya dolaylı olarak Base'den türetilmişse, aynı isim ve aynı :: ve / ile aynı parametre listesine sahip bir üye işlevi bildirilir, sonra Türetilen :: vf bildirilir aynı zamanda sanal (çok açıklanmış olsun ya da olmasın) ve geçersiz kılar 97) Baz :: vf.

Dipnot 97) temelde argüman listesi farklıysa, fonksiyonun değişmeyeceğini belirtir. geçersiz kılma ne de mutlaka virtual


29
2018-03-15 08:57