第13周上机实践项目1——动物这样叫(2)

2、显然,Animal设计为抽象类更合适,Animal不需要能够实例化,是专门作基类使用的。改造程序,使Animal设计为抽象类,这时main()函数中p = new Animal();将出错,将此行删除。

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

代码

#include <iostream>
using namespace std;
class Animal
{
protected:
    string name;
public:
    Animal(string n):name(n){}
    virtual void cry()=0;
};
class Mouse:public Animal
{
protected:
    char sex;
public:
    Mouse(string n,char s):Animal(n),sex(s) {}
    void cry()
    {
        cout<<"我叫"<<name<<",是一只";
        if(sex=='f')
            cout<<"女";
        else
            cout<<"男";
        cout<<"老鼠,我的叫声是:吱吱吱!"<<endl;
    }
};
class Cat:public Animal
{
public:
    Cat(string n):Animal(n) {}
    void cry()
    {
        cout<<"我叫"<<name<<",是一只猫,我的叫声是:喵喵喵!"<<endl;
    }
};
class Dog:public Animal
{
public:
    Dog(string n):Animal(n) {}
    void cry()
    {
        cout<<"我叫"<<name<<",是一条狗,我的叫声是:汪汪汪!"<<endl;
    }
};
class Giraffe:public Animal
{
    char sex;
public:
    Giraffe(string n,char s):Animal(n),sex(s) {}
    void cry()
    {
        cout<<"我叫"<<name<<",是";
        if(sex=='m')
            cout<<"男";
        else
            cout<<"女";
        cout<<"长颈鹿,我的脖子太长,发不出声音来!"<<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;
}
时间: 2024-10-31 04:49:54

第13周上机实践项目1——动物这样叫(2)的相关文章

第13周上机实践项目1——动物这样叫

下面是给出的基类Animal声明和main()函数. [cpp] view plaincopyprint? class Animal { public: virtual void cry() { cout<<"不知哪种动物,让我如何学叫?"<<endl; } }; int main( ){ Animal *p; p = new Animal(); p->cry(); Mouse m1("Jerry",'m'); p=&m1; p

第13周上机实践项目1——数组大折腾(1~3)

(1) 问题及代码 /* * Copyright (c) 2014, 烟台大学计算机学院 * All rights reserved. * 文件名称:test.cpp * 作 者:辛彬 * 完成日期:2014年 11 月 24 日 * 版 本 号:v1.0 * * 问题描述: 创建一个有20个元素的整型数组,通过初始化,为数组中的前10个元素赋初值,然后通过键盘输入后10个元素的值,从前往后(从第0个到第19个)输出数组中元素的值,每5个元素换一行.. * 输入描述:10个元素. * 程序输出:

第13周上机实践项目4——数组的排序(1)

问题及代码 /* * Copyright (c) 2014, 烟台大学计算机学院 * All rights reserved. * 文件名称:test.cpp * 作 者:辛彬 * 完成日期:2014年 11 月 25 日 * 版 本 号:v1.0 * * 问题描述: 编写函数,完成冒泡排序,要求不能改变下面的main函数.. * 输入描述:没有输入. * 程序输出:冒泡排序: */ #include <iostream> using namespace std; //两个函数bubble_s

第12周上机实践项目4——点、园的关系(1)

(1)先建立一个Point(点)类,包含数据成员x,y(坐标点): (2)以Point为基类,派生出一个Circle(圆)类,增加数据成员(半径),基类的成员表示圆心: (3)编写上述两类中的构造.析构函数及必要运算符重载函数(本项目主要是输入输出): (4)定义友元函数int locate,判断点p与圆的位置关系(返回值<0圆内,==0圆上,>0 圆外): 代码 #include <iostream> #include <cmath> using namespace

第八周上机实践项目1——实现复数类中的运算符重载(3)

定义一个定义完整的类(是可以当作独立的产品发布,成为众多项目中的"基础工程").这样的类在(2)的基础上,扩展+.-.*./运算符的功能,使之能与double型数据进行运算.设Complex c; double d; c+d和d+c的结果为"将d视为实部为d的复数同c相加",其他-.*./运算符类似. 问题及代码 /* * Copyright (c) 2015, 烟台大学计算机学院 * All rights reserved. * 文件名称:test.cpp * 作

第九周上机实践项目 项目2-我的数组类

问题及代码: [项目-我的数组类] 阅读程序,请完成成员函数的定义,因为存在指针型的数据成员,注意需要深复制的构造函数. #include<iostream> using namespace std; class MyArray { private: int *arrayAddr; //保存一个有len个整型元素的数组的首地址 int len; //记录动态数组的长度 int max; //动态数组中的最大值(并非动态数组中必须要的数据成员) public: MyArray(int *a, i

第九周上机实践项目 项目3-人数不定的工资类

问题及代码: [项目-人数不定的工资类] 设计一个工资类(Salary),其中的数据成员包括职工人数(number,人数不定)和number个职工的工资salary,要求输入职工工资并逐个输出. 提示:用固定大小的数组存储number个职工的工资,可能造成空间的浪费,也可能会由于空间不够而不能处理职工人数过多的应用.将salary声明为指针类型的成员,通过动态分配空间,分配正好大小的空间存储数据. class Salary { public: Salary(int n); //n为职工人数,初始

第14周上机实践项目1——折腾二维数组(1)

问题及代码 /* * Copyright (c) 2014, 烟台大学计算机学院 * All rights reserved. * 文件名称:test.cpp * 作 者:辛彬 * 完成日期:2014年 11 月 27 日 * 版 本 号:v1.0 * * 问题描述: 按行序优先输出数组元素. * 输入描述:后两列元素. * 程序输出:数组元素: */ #include <iostream> using namespace std; int main() { int i,x,y; int a[

第14周上机实践项目1——折腾二维数组(2)

问题及代码 /* * Copyright (c) 2014, 烟台大学计算机学院 * All rights reserved. * 文件名称:test.cpp * 作 者:辛彬 * 完成日期:2014年 11 月 27 日 * 版 本 号:v1.0 * * 问题描述: 按列序优先输出. * 输入描述:后两列元素. * 程序输出:数组元素: */ #include <iostream> using namespace std; int main() { int i,x,y; int a[5][4