C++ Поліморфізм

 

class Cats {
 public:
     virtual void Meow() = 0;
};

class Cat : public Cats {
 public:
     void Meow() { cout << "meow!\n"; }
};

class Tiger : public Cats {
 public:
     void Meow() { cout << "mreowww!\n"; }
};


int main() {

     Cats* cat1 = new Cat();
     Cats* cat2 = new Tiger();
     Cats* cat3 = new Cat();
     Cats* cat4 = new Tiger();

     Cats* mas[] = { cat1, cat2, cat3, cat4 };

     for (int i = 0; i < 4; i++) { mas[i]->Meow();
     }
}


// cat1 = new Tiger(); - можна змінити
// void Meow() override - можна вказати
// virtual void Meow(){ };
// dynamic_cast<Tiger*>(cat2)->доступ

 meow! 
 mreowww! 
 meow! 
 mreowww! 


 



Спеціалізований поліморфізм (поліморфізм функцій)

int Sum(int a, int b) {
     return a + b;
}

int Sum(int a, int b, int c) {
     return a + b + c;
}


int main() {
     cout << Sum(1, 2) << endl;
     cout << Sum(1, 2, 4) << endl;
}