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


    下面是给出的基类Animal声明和main()函数。

    class Animal
    {
    public:
      virtual void cry()
        {
          cout<<"不知哪种动物,让我如何学叫?"<<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;
    }

    1、根据给出的main()函数和运行结果的提示,设计出相关的各个类,注意观察运行结果,提取出每个类中需要的数据成员,并匹配上需要的成员函数。

    /*
    * Copyright (c) 2015,烟台大学计算机学院
    * All right reserved.
    * 作者:邵帅
    * 文件:Demo.cpp
    * 完成时间:2015年06月07日
    * 版本号:v1.0
    */
    #include <iostream>
    using namespace std;
    class Animal
    {
    public:
      virtual void cry()
        {
          cout<<"不知哪种动物,让我如何学叫?"<<endl;
        }
    };
    class Mouse:public Animal
    {
    public:
        Mouse(string n,char s):name(n),sex(s){}
        virtual void cry()
        {
            cout<<"我叫"<<name<<",是一只"<<((sex=='f')?"女":"男")<<"老鼠,我的叫声是:吱吱吱!"<<endl;
        }
    private:
        string name;
        char sex;
    };
    class Cat:public Animal
    {
    public:
        Cat(string n):name(n){}
    	virtual void cry()
    	{
    		cout<<"我叫"<<name<<",是一只猫,我的叫声是:喵喵喵!"<<endl;
    	}
    private:
        string name;
    };
    class Dog:public Animal
    {
    public:
        Dog(string n):name(n){}
    	virtual void cry()
    	{
    		cout<<"我叫"<<name<<",是一只狗,我的叫声是:汪汪汪!"<<endl;
    	}
    private:
        string name;
    };
    class Giraffe:public Animal
    {
    public:
        Giraffe(string n,char s):name(n),sex(s){}
        virtual void cry()
        {
            cout<<"我叫"<<name<<",是一只"<<((sex=='f')?"女":"男")<<"长颈鹿,我的脖子太长,但是发不出来声!"<<endl;
        }
    private:
        string name;
        char sex;
    };
    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、显然,Animal设计为抽象类更合适,Animal不需要能够实例化,是专门作基类使用的。改造程序,使Animal设计为抽象类,这时main()函数中p = new Animal();将出错,将此行删除。

    /*
    * Copyright (c) 2015,烟台大学计算机学院
    * All right reserved.
    * 作者:邵帅
    * 文件:Demo.cpp
    * 完成时间:2015年06月07日
    * 版本号:v1.0
    */
    #include <iostream>
    #include <string>
    using namespace std;
    class Animal
    {
    public:
      virtual void cry()=0;
    };
    class Mouse:public Animal
    {
    public:
        Mouse(string n,char s):name(n),sex(s){}
        virtual void cry()
        {
            cout<<"我叫"<<name<<",是一只"<<((sex=='f')?"女":"男")<<"老鼠,我的叫声是:吱吱吱!"<<endl;
        }
    private:
        string name;
        char sex;
    };
    class Cat:public Animal
    {
    public:
        Cat(string n):name(n){}
    	virtual void cry()
    	{
    		cout<<"我叫"<<name<<",是一只猫,我的叫声是:喵喵喵!"<<endl;
    	}
    private:
        string name;
    };
    class Dog:public Animal
    {
    public:
        Dog(string n):name(n){}
    	virtual void cry()
    	{
    		cout<<"我叫"<<name<<",是一只狗,我的叫声是:汪汪汪!"<<endl;
    	}
    private:
        string name;
    };
    class Giraffe:public Animal
    {
    public:
        Giraffe(string n,char s):name(n),sex(s){}
        virtual void cry()
        {
            cout<<"我叫"<<name<<",是一只"<<((sex=='f')?"女":"男")<<"长颈鹿,我的脖子太长,但是发不出来声!"<<endl;
        }
    private:
        string name;
        char sex;
    };
    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;
    }
    


    3、每一个Animal的派生类都有一个“名字”数据成员,这个成员设置为基类Animal的成员更好。改造上面的程序,将“名字”成员作为抽象类Animal数据成员被各派生类使用。

    /*
    * Copyright (c) 2015,烟台大学计算机学院
    * All right reserved.
    * 作者:邵帅
    * 文件:Demo.cpp
    * 完成时间:2015年06月07日
    * 版本号:v1.0
    */
    #include <iostream>
    #include <string>
    using namespace std;
    class Animal
    {
    public:
        Animal(string n):name(n){}
        virtual void cry()=0;
    protected:
        string name;
    };
    class Mouse:public Animal
    {
    public:
        Mouse(string n,char s):Animal(n),sex(s) {}
        virtual void cry()
        {
            cout<<"我叫"<<name<<",是一只"<<((sex=='f')?"女":"男")<<"老鼠,我的叫声是:吱吱吱!"<<endl;
        }
    private:
        char sex;
    };
    class Cat:public Animal
    {
    public:
        Cat(string n):Animal(n) {}
        virtual void cry()
        {
            cout<<"我叫"<<name<<",是一只猫,我的叫声是:喵喵喵!"<<endl;
        }
    };
    class Dog:public Animal
    {
    public:
        Dog(string n):Animal(n) {}
        virtual void cry()
        {
            cout<<"我叫"<<name<<",是一只狗,我的叫声是:汪汪汪!"<<endl;
        }
    };
    class Giraffe:public Animal
    {
    public:
        Giraffe(string n,char s):Animal(n),sex(s) {}
        virtual void cry()
        {
            cout<<"我叫"<<name<<",是一只"<<((sex=='f')?"女":"男")<<"长颈鹿,我的脖子太长,但是发不出来声!"<<endl;
        }
    private:
        char sex;
    };
    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;
    }
    


    @ Mayuko

  • 相关阅读:
    如果使用Excel oledb 导数据出现各种错误的解决方法
    如何对给定序列进行趋势预测
    Winform自定义控件之二叉树控件(2)
    WinForm自定义控件开发(1)
    .net 3.5 中的 服务器端回调
    Python内存管理
    oracle to mysql hibernate 实体id生成策略配置
    oracle to mysql
    mysql 删除所有表
    oracle函数在mysql用
  • 原文地址:https://www.cnblogs.com/mayuko/p/4567472.html
Copyright © 2020-2023  润新知