2016-04-01 21 views
0

'daki Geçersiz kılınan işlevlerin kullanımı Şu anda türetilmiş nesnelerin kalıtım ve dizilerini içeren bir kavramla ilgili bir sorun yaşıyorum. Bir işaretçi dizisi yarattım ve dizi konumunun çift veya tek olup olmamasına bağlı olarak bir temel sınıf veya türetilmiş bir sınıfla doldurdum. Ancak, birdType işlevini çağırdığımda, dizideki tüm nesneler, çift sayı dizisi nesneleri geçersiz kılınan sürüm işlevini kullanıyor olsa da, temel sınıf işlevini kullanır. Temel işlevde sanal arama mekanizmasını kullanmayı denedim, ancak bu program çöküyor gibi görünüyor.Temel sınıf dizisi

söz konusu kod:

class bird{ 
public: 
    void birdType(){cout<<"I am a bird.\n";} 
}; 
class sparrow:public bird 
{ 
    void birdType() { cout <<"I am a sparrow.\n";} 
}; 

int main(){ 
    bird *collection[5]; 
    for (int i = 0; i < 5; ++i) { 
     if (i % 2 != 0) 
     { 
      collection[i] = new bird; 

     } 
     else if (i % 2 == 0) 
     { 
      collection[i] = new sparrow; 
     } 



    } 
    for(int j=0;j<5;++j)collection[j]->birdType();; 
} 

ve mevcut Çıktı:

I am a bird 
I am a bird 
I am a bird 
I am a bird 
I am a bird 

cevap

0

Sen (kuş) sanal Baz sınıfta birdType() işlevini yapmak gerekir. Sanal değilse, arzu ettiğiniz mirasa sahip olmazsınız. İşi hile yapmalıdır. hile yapmalıdır.

+0

Hey hızlı cevap için teşekkürler, ben yeniden yazdığım zaman farklı bir şey yapmış olmalıyım, çünkü sanal şimdi çalışıyor gibi görünüyor. Önceden programım temel fonksiyonda sanal olarak çökecektir. – LOUDNOODLES

+0

@LOUDNOODLES Bunu duyduğuma sevindim! Bunu cevap olarak kabul etmek o zaman? – mwm314

İlgili konular