티스토리 뷰

[ Inheritence & Polymorphism ]

class Animal{
   public: void id(){cout << "animal";}
};

class Cat : public Animal{
   public: void id(){cout << "cat";}
};

class Dog : public Animal{
   public: void id(){cout << "dog";}
};

main(){
   Animal *pA[] = {new Animal, new Dog, new Cat};

   for(int k=0; k<3; k++)
      pA[k]->id();
}
animal animal animal


[ Virtual Functions ]

class Animal{
   public: virtual void id(){cout  <<  "animal";}
};

class Cat : public Animal{
   // Base function이 virtual이면 virtual keyword 생략 가능.
   public: virtual void id(){cout << "cat";}
};

class Dog : public Animal{
   // Base function이 virtual이면 virtual keyword 생략 가능.
   public: virtual void id(){cout << "dog";}
};

main(){
   Animal *pA[] = {new Animal, new Dog, new Cat};

   for(int k=0; k<3; k++)
      pA[k]->id();
}
animal dog cat


- 모든 함수를 virtual 쓰는 것은 좋지 않다.
- Why? Virtual Function은 Dymamic Binding을 쓰기 때문에 Compile Time에 수행된다.
- 즉, 메모리 점유가 많아져 Overhead가 발생한다.
- Dynamic Binding : Virtual Function이 Pointer나 Reference를 통해 호출될 때만 일어난다.