第十三週項目一(2):動物這樣叫:抽象類

問題及代碼:

/*
*Copyright (c)2015,煙臺大學計算機與控制工程學院
*All rights reserved.
*文件名稱:  動物這樣叫 .cpp
*作    者:白雲飛
*完成日期:2015年5月29日
*版 本 號:v1.0
*
*問題描述:下面是給出的基類Animal聲明和main()函數。根據給出的main()函數和運行結果的提示,設計出相關的各個類,注意觀察運行結果,提取出每個類中需要的數據成員,並匹配上需要的成員函數。Animal設計爲抽象類更合適,Animal不需要能夠實例化,是專門作基類使用的。改造程序,使Animal設計爲抽象類,
*程序輸入:動物姓名,性別
*程序輸出:動物姓名,性別和叫聲
*/
#include <iostream>
#include <string>
using namespace std;
class Animal
{
public:
   virtual void cry() = 0;
};
class Mouse:public Animal
{
protected:
    string name;
    char sex;
public:
    Mouse(string nam,char s):name(nam),sex(s) {}
    virtual void cry()
    {
        cout<<"我叫"<<name<<",是一隻"<<((sex=='m')?"男":"女")<<"老鼠,我的叫聲是:吱吱吱!"<<endl;
    }
};
class Cat:public Animal
{
protected:
    string name;
public:
    Cat(string nam):name(nam) {}
    virtual void cry()
    {
        cout<<"我叫"<<name<<",是一隻貓,我的叫聲是:喵喵喵!"<<endl;
    }
};
class Dog:public Animal
{
protected:
    string name;
public:
    Dog(string nam):name(nam) {}
    virtual void cry()
    {
        cout<<"我叫"<<name<<",是一隻狗,我的叫聲是:汪汪汪!"<<endl;
    }
};
class Giraffe:public Animal
{
protected:
    string name;
    char sex;
public:
    Giraffe(string nam,char s):name(nam),sex(s) {}
    virtual void cry()
    {
        cout<<"我叫"<<name<<",是一隻"<<((sex=='m')?"男":"女")<<"長頸鹿,我的脖子太長,發不出聲音來!"<<endl;
    }
};
int main( )
{
    Animal *p;
    Mouse m1("Jerry",'m');
    p=&m1;
    p->cry();
    Mouse m2("Jemmy",'f');
    p=&m2;
    p->cry();
    Cat c1("Tom");
    p=&c1;
    p->cry();
    Dog d1("Droopy");
    p=&d1;
    p->cry();
    Giraffe g1("Gill",'m');
    p=&g1;
    p->cry();
    return 0;
}


運行結果:

 

學習心得:

Animal爲抽象類,而Animal的成員函數cry()爲純虛函數,純虛函數只有函數的名字而不具備函數功能,不能被調用。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章