<span style="font-size:18px;">/*【任務】下面給出了基類Animal和main()函數。(任務.1)根據main()函數給出的注釋提示,設計出相關的各個類。(任務.2)顯然,Animal設計為抽象類別更合適,Animal不需要能夠執行個體化,是專門作基類使用的。改造程式,使Animal設計為抽象類別,這時main()函數中p = new Animal();將出錯,將此行刪除。(任務.3)每一個Animal的衍生類別都有一個“名字”資料成員,改造上面的程式,將這一資料成員作為抽象類別Animal資料成員被各衍生類別使用。*/</span>
來源程式及運行結果
<span style="font-size:18px;">#include "iostream"#include<string>using namespace std;class Animal{public:virtual void cry() {cout<<"不知哪種動物,讓我如何學叫?"<<endl;}};class Mouse :public Animal{private:string name;public:Mouse(string na):name(na){};void cry(){cout<< "我叫" <<name<< ",是一隻老鼠,我的叫聲是:吱吱吱!" <<endl;}};class Cat:public Animal{private:string name;public:Cat(string na):name(na){};void cry(){cout<<"我叫"<<name<<",是一隻貓,我的叫聲是:喵喵喵!"<<endl;}};class Dog :public Animal{private:string name;public:Dog(string na):name(na){};void cry(){cout<< "我叫" <<name<<",是一隻狗,我的叫聲是:汪汪汪!"<<endl;}};class Giraffe :public Animal{private:string name;public:Giraffe(string na):name(na){};void cry(){cout<<"我叫"<<name<<",是一隻長頸鹿,脖子太長,發不出聲音!"<<endl;}};int main( ){Animal *p; p = new Animal(); p->cry(); //輸出: 不知哪種動物,讓我如何學叫?(問題出自此處)Mouse m("Jerry"); p=&m; p->cry(); //輸出: 我叫Jerry,是一隻老鼠,我的叫聲是:吱吱吱!Cat c("Tom"); p=&c; p->cry(); //輸出: 我叫Tom,是一隻貓,我的叫聲是:喵喵喵!Dog d("Droopy"); p=&d; p->cry(); //輸出: 我叫Droopy,是一條狗,我的叫聲是:汪汪汪!Giraffe g("Gill"); p=&g; p->cry(); //輸出: 我叫Gill,是長頸鹿,脖子太長,發不出聲音來!system("pause");return 0;}