Pertanyaan Fungsi virtual dan override murni (c ++)


Saya mencari di internet untuk menjawab pertanyaan saya tetapi tidak dapat menemukannya, jadi di sinilah saya.

Apakah benar untuk menentukan penggantian ke fungsi saya yang berasal dari virtual murni:

class baseClass
{
    public:
        virtual void myFunction() = 0;
}

class derivedClass : public baseClass
{
    public:
        virtual void myFunction() override;
}

Apakah ini benar?

Dan pertanyaan kedua saya adalah: Apakah saya harus menentukan virtual di derivedClass untuk fungsi saya meskipun tidak ada kelas yang akan diwariskan dari kelas turunan saya (ini akan menjadi final)?

Terima kasih banyak atas jawaban Anda!


5
2018-04-09 09:16


asal


Jawaban:


Apakah ini benar?

Iya nih. Override memastikan bahwa fungsi tersebut virtual dan mengesampingkan fungsi virtual dari kelas dasar. Program ini tidak terbentuk (kesalahan saat kompilasi dihasilkan) jika ini tidak benar.

Apakah saya harus menentukan virtual di derivedClass untuk fungsi saya meskipun tidak ada kelas yang akan diwariskan dari kelas turunan saya (ini akan menjadi final)?

Tidak kamu tidak. Tetapi bahkan jika Anda meninggalkan specifier virtual itu tetap virtual. Karena sudah dinyatakan virtual di Anda BaseClass.

Jika beberapa fungsi anggota vf dideklarasikan sebagai virtual dalam Base kelas, dan   beberapa kelas Berasal, yang berasal, langsung atau tidak langsung, dari   Base, memiliki deklarasi untuk fungsi anggota dengan yang sama

  • nama
  • daftar jenis parameter (tetapi bukan jenis kembalinya)
  • kualifikasi-cv
  • ref-kualifikasi

Maka fungsi ini di dalam kelas Derived juga bersifat virtual (baik atau   bukan kata kunci virtual digunakan dalam deklarasinya) dan menimpa   Basis :: vf (apakah kata override digunakan atau tidak dalam bentuknya)   pernyataan). Base :: vf tidak perlu terlihat (bisa dideklarasikan   pribadi, atau diwarisi menggunakan warisan pribadi) untuk ditimpa.


3
2018-04-09 09:21



Juga, harap ingat bahwa Anda harus mendefinisikan destruktor virtual (dapat kosong) di baseClass, untuk menjamin dealokasi sumber daya yang tepat di kelas turunan.


1
2018-04-09 09:24