第十三周项目1——动物这样叫

来源:互联网 发布:家居网络摄像头 编辑:程序博客网 时间:2024/05/24 23:16
下面是给出的基类Animal声明和main()函数。

程序的运行结果将是:

1、根据给出的main()函数和运行结果的提示,设计出相关的各个类,注意观察运行结果,提取出每个类中需要的数据成员,并匹配上需要的成员函数。
2、显然,Animal设计为抽象类更合适,Animal不需要能够实例化,是专门作基类使用的。改造程序,使Animal设计为抽象类,这时main()函数中p = new Animal();将出错,将此行删除。
3、每一个Animal的派生类都有一个“名字”数据成员,这个成员设置为基类Animal的成员更好。改造上面的程序,将“名字”成员作为抽象类Animal数据成员被各派生类使用。

代码如下:

#include <iostream>#include<string>using namespace std;class Animal{public:  virtual void cry()    {      cout<<"不知哪种动物,让我如何学叫?"<<endl;    }};class Mouse:public Animal{public:    Mouse(string nam,char s):name(nam),sex(s){}    virtual void cry();private:    string name;    char sex;};void Mouse::cry(){    cout<<"我叫"<<name<<",是一只"<<((sex=='m')?"男":"女")<<"老鼠,我的叫声是:吱吱吱!"<<endl;}class Cat:public Animal{public:   Cat(string nam):name(nam){}   virtual void cry()     {         cout<<"我叫"<<name<<",是一只猫,我的叫声是:喵喵喵!"<<endl;     }private:    string name;};class Dog:public Animal{public:    Dog(string nam):name(nam){}    virtual void cry()     {         cout<<"我叫"<<name<<",是一条狗,我的叫声是:汪汪汪!"<<endl;     }private:    string name;};class Giraffe:public Animal{private:    string name;    char sex;public:    Giraffe(string nam,char s):name(nam),sex(s){}    virtual void cry();};void Giraffe::cry(){    cout<<"我叫"<<name<<",是"<<((sex=='m')?"男":"女")<<"长颈鹿,我的脖子太长,发不出声音来!"<<endl;}int main( ){    Animal *p;    p = new Animal();    p->cry();    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;}

总结:开始编写时在判断男女时出了点小差错,想想就知道自己编写的错在哪里了;

(2)

代码如下:

#include <iostream>#include<string>using namespace std;class Animal{public:  virtual void cry()=0;};class Mouse:public Animal{public:    Mouse(string nam,char s):name(nam),sex(s){}    virtual void cry();private:    string name;    char sex;};void Mouse::cry(){    cout<<"我叫"<<name<<",是一只"<<((sex=='m')?"男":"女")<<"老鼠,我的叫声是:吱吱吱!"<<endl;}class Cat:public Animal{public:   Cat(string nam):name(nam){}   virtual void cry()     {         cout<<"我叫"<<name<<",是一只猫,我的叫声是:喵喵喵!"<<endl;     }private:    string name;};class Dog:public Animal{public:    Dog(string nam):name(nam){}    virtual void cry()     {         cout<<"我叫"<<name<<",是一条狗,我的叫声是:汪汪汪!"<<endl;     }private:    string name;};class Giraffe:public Animal{private:    string name;    char sex;public:    Giraffe(string nam,char s):name(nam),sex(s){}    virtual void cry();};void Giraffe::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;}



总结:

使用虚函数可以使指向基类的指针访问派生类中与基类同名的函数。

(3)

代码如下:

#include <iostream>#include<string>using namespace std;class Animal{protected:    string name;public:    Animal(string nam):name(nam){}    virtual void cry() = 0;};class Mouse:public Animal{public:    Mouse(string nam,char s):Animal(nam),sex(s){}    virtual void cry();private:    char sex;};void Mouse::cry(){    cout<<"我叫"<<name<<",是一只"<<((sex=='m')?"男":"女")<<"老鼠,我的叫声是:吱吱吱!"<<endl;}class Cat:public Animal{public:   Cat(string nam):Animal(nam){}   virtual void cry()     {         cout<<"我叫"<<name<<",是一只猫,我的叫声是:喵喵喵!"<<endl;     }};class Dog:public Animal{public:    Dog(string nam):Animal(nam){}    virtual void cry()     {         cout<<"我叫"<<name<<",是一条狗,我的叫声是:汪汪汪!"<<endl;     }};class Giraffe:public Animal{private:    char sex;public:    Giraffe(string nam,char s):Animal(nam),sex(s){}    virtual void cry();};void Giraffe::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;}


总结:

了解了虚函数的运用

0 0
原创粉丝点击
热门问题 老师的惩罚 人脸识别 我在镇武司摸鱼那些年 重生之率土为王 我在大康的咸鱼生活 盘龙之生命进化 天生仙种 凡人之先天五行 春回大明朝 姑娘不必设防,我是瞎子 老人大便干燥拉不出来怎么办 海底捞排队过号怎么办 脱毛后吃了海鲜怎么办 脂肪填充变丑了怎么办 全切双眼皮伤口长包怎么办 鼻综合修复眼中心修太宽怎么办 fgo的id忘了怎么办 电脑下载模拟器显示内存不够怎么办 安逍遥模拟器运行一段时间卡怎么办 pos机微信支付签到失败怎么办 逆水寒fps过低怎么办 电脑卡怎么办怎么清理磁盘 苹果手机设置找不到了怎么办 苹果手机自动拨出电话怎么办 机械键盘灯坏了怎么办 黄金塔花叶子卷怎么办 办的宽带不用了怎么办 取卵后3天还出血怎么办 取卵后腹水怎么办9天了 取卵后第三天肚子涨第天移植怎么办 取卵移植后肚子涨怎么办 没有成熟的卵泡不排卵怎么办 产后9年妊娠纹痒怎么办 手机屏幕锁了忘记密码怎么办 电脑被黑客锁屏怎么办 r9解锁密码忘了怎么办 oppor9开机密码忘了怎么办 vivo手机忘记解锁图案怎么办 oppor9s解锁图案忘了怎么办 oppor9图案解锁忘记了怎么办 oppor9解锁图案忘了怎么办 oppor9s锁屏密码忘了怎么办 oppor9s忘记锁屏图案怎么办 oppor9忘记锁屏图案怎么办 电脑锁屏卡住了怎么办 dell电脑密码忘了怎么办 dell电脑密码忘记了怎么办 手机锁屏为什么打不开怎么办 手机图形解锁忘记了怎么办 华硕电脑锁屏了怎么办 5s忘记解锁密码怎么办