베타 빌드 530의 배열 크기 조정 버그 - 페이지 8

 
angevoyageur :
과일(사과, 배), 고양이, 개, 동물 다음으로. 사람들이 웁에 대해 이야기 할 때 상상력의 부족은 끔찍합니다. (cyclops993, 당신에 관한 것이 아니라 wikipedia.) 어떤 실제 프로그램에 "talk" 메소드가 있는 "animal" 클래스가 필요합니다. 가능한 한 빨리 "거래" 사례를 게시하겠습니다.

약간 더 완전한 예제 스크립트:

 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;
}

내가 전에 눈치채지 못한 것은 기본 클래스에 대한 참조가 있는 경우 본문이 없는 가상 기능 을 가질 수 없는 것 같습니다. 위의 예에서는 다음을 수행할 수 없습니다.

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

... 반면 C++에서는 다음을 수행할 수 있습니다 .

 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 :

그래서 클래스 고양이와 클래스 개를 무엇이라고 부르겠습니까? 그들은 동물의 하위 클래스입니까? dog 클래스에서 dog의 또 다른 하위 클래스를 만들고 클래스 pitbull이라고 부를 수 있습니까?

네, 바로 그것입니다. 그리고 이러한 클래스를 사용할 때 변수를 사용하고 한 클래스와 해당 하위 클래스의 모든 개체에 영향을 줍니다. cyclops993(메인 함수 )의 예와 같이 talk()를 호출할 때 좋은 함수가 사용됩니다.
 

좋아, 좀 깔끔해, 나는 이것을 배우기 위해 약간의 노력을 기울일 것 같아

 
SDC :

좋아, 좀 깔끔해, 나는 이것을 배우기 위해 약간의 노력을 기울일 것 같아

예를 들어:

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

...핏불은 고양이나 다른 개처럼 말을 할 수 있을 뿐만 아니라 위협할 수도 있습니다.