Temel anlayışım, saf bir sanal fonksiyon için bir uygulama olmadığı, ancak saf sanal fonksiyon için bir uygulama olabileceği söylendi. class A { public: virtual void f() = 0; }; void A::f() { cout<<"Test"<<endl; } Kod tamam mı? Bir uygulama ile onu saf bir sanal işlev haline getirmenin amacı nedir?
Sanal bir yıkıcıya olan ihtiyacı anlıyorum. Ama neden saf bir sanal yıkıcıya ihtiyacımız var? C ++ makalelerinden birinde yazar, bir sınıf özeti yapmak istediğimizde saf sanal yıkıcı kullandığımızdan bahsetmiştir. Ancak üye işlevlerinden herhangi birini saf sanal olarak yaparak sınıf özeti yapabiliriz. Yani sorularım Bir yıkıcıyı ne zaman gerçekten sanal hale …
Her zaman saf bir sanal işlev beyan ederiz: virtual void fun () = 0 ; Yani, her zaman 0'a atanır. Ne anlamak bu NULL için bu işlev için vtable giriş başlatmak olduğunu ve burada başka bir değer derleme zamanı hatası ile sonuçlanır olduğunu. Bu anlayış doğru mu değil mi?
Bazen bilgisayarımda "saf sanal işlev çağrısı" hatasıyla çöken programlar görüyorum. Soyut bir sınıftan bir nesne yaratılamadığında bu programlar nasıl derlenir?
Bugün saf işlev hakkında okuyordum, kullanımıyla karıştırıldım: Aynı girdi kümesi için aynı değer kümesini döndüren ve gözlemlenebilir herhangi bir yan etkisi olmayan bir işlevin saf olduğu söylenir. örneğin strlen()saf bir işlev iken rand()saf olmayan bir işlevdir . __attribute__ ((pure)) int fun(int i) { return i*i; } int main() { int …