Tính đa hình

      Comments Off on Tính đa hình

Có nhiều hình thái khác nhau.
– overloading: Compile time polymorphism Cùng 1 hàm nhưng với tham số đầu vào khác nhau thì chạy những đoạn code khác nhau.

void show(){
   st::cout << "show(void)\n";
}
void show(int i){
  std::cout << "show(int)\n";
}

– overriding: Run time polymorphism Cùng 1 hàm nhưng đối tượng khác nhau gọi sẽ khác nhau

#include <iostream>
class A{
  public: virtual void show(){
     std::cout <<"A Show\n"; 
 }
 public: void showA(){
    std::cout << "Toi la A\n";
 }
};

class B:public A{
    public: void show() override{
    std::cout <<"B show\n"; } }; int main(){ A a; B b; A* a1 = new B(); a.show(); b.show(); b.showA(); a1->show();
  delete a1;  
  return 0;
}

– Nhìn theo góc nhìn đối tượng
Còn gọi là resolve late.

#include <iostream>
class A{
  int v;
  public: virtual void show(){
     std::cout <<"A Show\n"; 
 }
};

class B:public A{
    int v;
    public: void show() override{
    std::cout <<"B show\n";
 }
};
int main(){
  A *a = new B();
  return 0;
}

nếu a.v thì nó được coi như object của A,
nếu a.show() thì nó lại được coi như objec của B;