我目前正在從「C++通過遊戲編程」的例子,我來到這個例子證明多態性使用基類指針到派生類對象
#include <iostream>
using namespace std;
class Enemy
{
public:
Enemy(int damage = 10);
virtual ~Enemy();
void virtual Attack() const;
protected:
int* m_pDamage;
};
Enemy::Enemy(int damage)
{
m_pDamage = new int(damage);
}
Enemy::~Enemy()
{
cout << "In Enemy destructor, deleting m_pDamage.\n";
delete m_pDamage;
m_pDamage = 0;
}
void Enemy::Attack() const
{
cout << "An enemy attacks and inflicts " << *m_pDamage << " damage points.";
}
class Boss : public Enemy
{
public:
Boss(int multiplier = 3);
virtual ~Boss();
void virtual Attack() const;
protected:
int* m_pMultiplier;
};
Boss::Boss(int multiplier)
{
m_pMultiplier = new int(multiplier);
}
Boss::~Boss()
{
cout << "In Boss destructor, deleting m_pMultiplier.\n";
delete m_pMultiplier;
m_pMultiplier = 0;
}
void Boss::Attack() const
{
cout << "A boss attacks and inflicts " << (*m_pDamage) * (*m_pMultiplier)
<< " damage points.";
}
int main()
{
cout << "Calling Attack() on Boss object through pointer to Enemy:\n";
Enemy* pBadGuy = new Boss();
pBadGuy->Attack();
cout << "\n\nDeleting pointer to Enemy:\n";
delete pBadGuy;
pBadGuy = 0;
return 0;
}
我的問題是,爲什麼這條線使用:的
Enemy* pBadGuy = new Boss()
代替
Boss badGuy;
badGuy.Attack();
?
作者稱之爲「使用babes類指針派生類對象」。 經常使用嗎?它對於「常規」實例化方法有什麼優點嗎?
謝謝!
可能重複[爲什麼我應該使用指針而不是對象本身?](http://stackoverflow.com/questions/22146094/why-should-i-use-a-pointer-rather-比對象本身) –
幫你一個忙,找一本不同的書來學習C++編程。這個代碼示例有很多不對的地方,你只需要忘記。像'using namespace std;'一樣,那些指向單個'int'(可能剛剛使用'int')的'int *',在指針離開之前將一個指針指定給0(浪費時間);所有那些毫無意義的保護成員。 –
我明白你的觀點,我也一直在閱讀其他書籍。我不明白爲什麼將0分配給一個指針。我認爲這本書比別人更好地解釋了一些概念(比如類,向量,指針和引用)。我也在閱讀Prata,但它在很多地方得到了非常詳細的介紹,並且還有一些重點從主題中解脫出來。 – Sabyc90