Beta derleme 530'da dizi yeniden boyutlandırma hatası - sayfa 8

 
angevoyageur :
Meyvelerden (elma, armut), kedi, köpek ve hayvandan sonra. İnsanlar oop hakkında konuşurken hayal gücü eksikliği korkunç. (cyclops993, sizinle ilgili değil, wikipedia.) Hangi gerçek programın "talk" yöntemiyle "hayvan" sınıfına ihtiyacı var. En kısa sürede bir "ticaret" örneği yayınlayacağım.

Biraz daha eksiksiz örnek komut dosyası:

 class Animal {
     public : virtual string talk() { return "" ;}
};
 
class Cat : public Animal {
     public : string talk() { return "Meow!" ;}
};
 

class Dog : public Animal {
     public : string talk() { return "Woof!" ;}
};

void OnStart ()
{
   Animal * random;
   if ( GetTickCount () % 2 == 0 ) {
      random = new Cat();
   } else {
      random = new Dog();
   }
   MessageBox (random.talk());  
   delete random;
}

Daha önce fark etmediğim şey, temel sınıfa bir referans varsa, gövdesi olmayan sanal işlevlere sahip olmanın mümkün olmadığıdır. Yukarıdaki örnekte, aşağıdakileri yapamazsınız:

 class Animal {
   public : virtual string talk();
};

...oysa C++'da şunları yapabilirsiniz :

 class Animal {
     public : virtual const char * talk() = 0 ; // Pure virtual function
};
 
class Cat : public Animal {
     public : const char *  talk() { return "Meow!" ;}
};
 

class Dog : public Animal {
     public : const char * talk() { return "Woof!" ;}
};

void main()
{
   Animal * random;
   if ( GetTickCount () % 2 == 0 ) {
      random = new Cat();
   } else {
      random = new Dog();
   }
   printf (random->talk());   
}
 
SDC :

peki kedi ve köpek sınıfına ne dersin, bunlar hayvanın alt sınıfları mı? köpek sınıfında başka bir köpek alt sınıfı oluşturup buna pitbull sınıfı diyebilir misiniz?

Evet tam olarak bu. Ve bu sınıfları kullanırken, bir değişken kullanırsınız ve bir sınıfın ve alt sınıflarının herhangi bir nesnesini etkilersiniz. cyclops993 (main function ) örneğinde gösterildiği gibi, talk() işlevini çağırdığınızda good işlevi kullanılır.
 

tamam bu çok güzel sanırım bunu öğrenmek için biraz çaba sarf edeceğim

 
SDC :

tamam bu biraz güzel sanırım bunu öğrenmek için biraz çaba sarf edeceğim

Örneğin:

 class Pitbull : public Dog {
   public : 
       string talk() { return "Growl!" ;}
       void menace() {}
};

...Pitbull'lar, kediler ve diğer köpekler gibi sadece konuşmakla kalmaz, aynı zamanda bir şeyleri tehdit edebilir.