虚函数与调用和重写基类成员函数

来源:互联网 发布:数据库登录界面代码 编辑:程序博客网 时间:2024/06/09 23:06
//Overriding Boss
//Demonstrates calling and overriding base member functions


#include <iostream>


using namespace std;


class Enemy
{
public:
Enemy(int damage = 10);
void virtual Taunt() const;     //made virtual to be overridden
void virtual Attack() const;    //made virtual to be overridden


private:
int m_Damage;
};


Enemy::Enemy(int damage): 
m_Damage(damage)
{}


void Enemy::Taunt() const
{
cout << "The enemy says he will fight you.\n";
}  


void Enemy::Attack() const
{
cout << "Attack! Inflicts " << m_Damage << " damage points.";
}


class Boss : public Enemy
{
public:
Boss(int damage = 30);
void virtual Taunt() const;      //optional use of keyword virtual
void virtual Attack() const;     //在将一个成员函数声明为虚函数,使得成员函数能如预期用于对象的指针与引用
};                                   //因为在派生类Boss中重写,于是在基类中声明为虚函数


Boss::Boss(int damage): 
Enemy(damage)            //显示调用基类enemy的构造函数,并将damage传递给它
{}


void Boss::Taunt() const     //override base class member function 此处不必显示声明virtual
{
cout << "The boss says he will end your pitiful existence.\n";
}  


void Boss::Attack() const    //override base class member function
{
Enemy::Attack();         //显式调用基类的Attack()成员函数
cout << " And laughs heartily at you.\n";
}   


int main()
{
cout << "Enemy object:\n";
Enemy anEnemy;
anEnemy.Taunt();
anEnemy.Attack();


cout << "\n\nBoss object:\n";
Boss aBoss;
aBoss.Taunt();
aBoss.Attack(); 


return 0;
}