我是C++面向對象編程的初學者。我正在學習「抽象類」裏的示例代碼:抽象類的需求是什麼?爲什麼通過其基類訪問派生類方法?在C++中
#include <iostream>
using namespace std;
class Enemy {
public:
virtual void attack() = 0;
};
class Ninja: public Enemy {
public:
void attack() {
cout << "Ninja!"<<endl;
}
};
class Monster: public Enemy {
public:
void attack() {
cout << "Monster!"<<endl;
}
};
int main()
{
Ninja n;
Monster m;
Enemy *e1 = &n;
Enemy *e2 = &m;
e1->attack();
e2->attack();
return 0;
}
我想明白的是,爲什麼我就不能使用派生類的對象直接訪問派生類成員「」運營商(它的工作原理,但不建議爲什麼?)。
像這樣:
int main()
{
Ninja n;
Monster m;
Enemy *e1 = &n;
Enemy *e2 = &m;
//e1->attack();
//e2->attack();
n.attack();
m.attack();
return 0;
}
我知道會有我們需要通過基類訪問派生類的成員的情況(我認爲這是通常使用的所有程序員)但我不知道這種情況的實際實現(爲什麼我們不能直接進行,爲什麼要通過基類的指針?)。
如果有人能澄清我的疑問,我會很高興。
的[爲什麼我們需要在C++抽象類?]可能的複製(http://stackoverflow.com/questions/14189438/why-do-we-need-abstract-classes-in-c) –
你需要一個更深的例子。假設你有對敵人執行任務的功能。你不想一遍又一遍地寫一個'Ninja',一個給''Monster',一個給'Unicron'等等。 – user4581301
@AndyThomas ...給我一些時間。我會理解這個概念,如果它們看起來一樣,我會刪除我的問題。謝謝。 – 14yearoldprogrammer