📌 父類別定義某個函式為 virtual
,子類別就可以改寫它
#include <iostream>
using namespace std;
class Character
{
public:
virtual void attack()
{
cout << "角色->攻擊!" << endl;
}
};
class Warrior : public Character
{
public:
void attack() override
{
cout << "勇者->揮劍!" << endl;
}
};
class Mage : public Character
{
public:
void attack() override
{
cout << "法師->火球術!" << endl;
}
};
int main()
{
Character *c1 = new Warrior();
Character *c2 = new Mage();
c1->attack();
c2->attack();
delete c1;
delete c2;
return 0;
}
📌父類別中有純虛擬函式 (pure virtual function),這個類別就變成抽象類別
#include <iostream>
using namespace std;
class Character
{
public:
virtual void attack() = 0;
};
class Warrior : public Character
{
public:
void attack() override
{
cout << "勇者->揮劍!" << endl;
}
};
class Mage : public Character
{
public:
void attack() override
{
cout << "法師->火球術!" << endl;
}
};
int main()
{
Character *team[2];
team[0] = new Warrior();
team[1] = new Mage();
for (int i = 0; i < 2; i++)
{
team[i]->attack();
}
for (int i = 0; i < 2; i++)
{
delete team[i];
}
return 0;
}
📌 虛擬函式 → 根據物件實際型別,呼叫對應的實作,這就是多型的精髓
📌 抽象類別 → 提供一個「設計規格」
強制子類別去定義特定功能,確保系統架構的一致性