课程首页地址:http://blog.csdn.net/sxhelijian/article/details/7910565,本周题目链接:http://blog.csdn.net/sxhelijian/article/details/8987478

【项目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()函数和运行结果的提示,设计出相关的各个类,注意观察运行结果,提取出每个类中需要的数据成员,并匹配上需要的成员函数。
2、显然,Animal设计为抽象类更合适,Animal不需要能够实例化,是专门作基类使用的。改造程序,使Animal设计为抽象类,这时main()函数中p = new Animal();将出错,将此行删除。
3、每一个Animal的派生类都有一个“名字”数据成员,这一共有的成员完全可以由基类提供改造上面的程序,将这一数据成员作为抽象类Animal数据成员被各派生类使用。

参考 解答:

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

#include "iostream"
#include<string>
using namespace std;
class Animal
{
public:virtual void cry(){cout<<"不知哪种动物,让我如何学叫?"<<endl;}
};class Mouse : public Animal
{
private: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
{
private:string name;
public:Cat(string nam):name(nam) {}virtual void cry(){cout<<"我叫"<<name<<",是一只猫,我的叫声是:喵喵喵!"<<endl;}
};class Dog : public Animal
{
private:string name;
public:Dog(string nam):name(nam) {}virtual void cry(){cout<<"我叫"<<name<<",是一条狗,我的叫声是:汪汪汪!"<<endl;}
};class Giraffe : public Animal
{
private: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;p = new Animal();p->cry(); //输出: 不知哪种动物,让我如何学叫?Mouse m1("Jerry",'m');p=&m1;p->cry(); //输出: 我叫Jerry,是一只男老鼠,我的叫声是:吱吱吱!Mouse m2("Jemmy",'f');p=&m2;p->cry(); //输出: 我叫Jemmy,是一只女老鼠,我的叫声是:吱吱吱!Cat c1("Tom");p=&c1;p->cry(); //输出: 我叫Tom,是一只猫猫,我的叫声是:喵喵喵!Dog d1("Droopy");p=&d1;p->cry(); //输出: 我叫Droopy,是一条狗狗,我的叫声是:汪汪汪!Giraffe g1("Gill",'m');p=&g1;p->cry(); //输出: 我叫Gill,是男长颈鹿,脖子太长,发不出声音来!return 0;
}

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

#include "iostream"
#include<string>
using namespace std;
class Animal
{
public:virtual void cry() = 0;
};class Mouse : public Animal
{
private: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
{
private:string name;
public:Cat(string nam):name(nam) {}virtual void cry(){cout<<"我叫"<<name<<",是一只猫,我的叫声是:喵喵喵!"<<endl;}
};class Dog : public Animal
{
private:string name;
public:Dog(string nam):name(nam) {}virtual void cry(){cout<<"我叫"<<name<<",是一条狗,我的叫声是:汪汪汪!"<<endl;}
};class Giraffe : public Animal
{
private: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;
//    p = new Animal();
//    p->cry(); //输出: 不知哪种动物,让我如何学叫?Mouse m1("Jerry",'m');p=&m1;p->cry(); //输出: 我叫Jerry,是一只男老鼠,我的叫声是:吱吱吱!Mouse m2("Jemmy",'f');p=&m2;p->cry(); //输出: 我叫Jemmy,是一只女老鼠,我的叫声是:吱吱吱!Cat c1("Tom");p=&c1;p->cry(); //输出: 我叫Tom,是一只猫猫,我的叫声是:喵喵喵!Dog d1("Droopy");p=&d1;p->cry(); //输出: 我叫Droopy,是一条狗狗,我的叫声是:汪汪汪!Giraffe g1("Gill",'m');p=&g1;p->cry(); //输出: 我叫Gill,是男长颈鹿,脖子太长,发不出声音来!return 0;
}

3、每一个Animal的派生类都有一个“名字”数据成员,这一共有的成员完全可以由基类提供改造上面的程序,将这一数据成员作为抽象类Animal数据成员被各派生类使用。

#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
{
private:char sex;
public:Mouse(string nam, char s):Animal(nam),sex(s) {}virtual void 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(){cout<<"我叫"<<name<<",是"<<((sex=='m')?"男":"女")<<"长颈鹿,我的脖子太长,发不出声音来!"<<endl;}
};int main( )
{Animal *p;
//    p = new Animal();
//    p->cry(); //输出: 不知哪种动物,让我如何学叫?Mouse m1("Jerry",'m');p=&m1;p->cry(); //输出: 我叫Jerry,是一只男老鼠,我的叫声是:吱吱吱!Mouse m2("Jemmy",'f');p=&m2;p->cry(); //输出: 我叫Jemmy,是一只女老鼠,我的叫声是:吱吱吱!Cat c1("Tom");p=&c1;p->cry(); //输出: 我叫Tom,是一只猫猫,我的叫声是:喵喵喵!Dog d1("Droopy");p=&d1;p->cry(); //输出: 我叫Droopy,是一条狗狗,我的叫声是:汪汪汪!Giraffe g1("Gill",'m');p=&g1;p->cry(); //输出: 我叫Gill,是男长颈鹿,脖子太长,发不出声音来!return 0;
}

C++第14周项目1 - 动物怎么叫相关推荐

  1. 第14周项目1 - 动物怎么叫

    /* *程序的版权和版本声明部分: *Copyright(c)2013,烟台大学计算机学院学生 . *All rights reserved. *作者:李家豪 *完成日期:2014年6月3号. *版本 ...

  2. 数据结构上机实践第14周项目1(4) - 验证算法(平衡二叉树)

    验证算法(平衡二叉树) 项目要求如下: (1)由整数序列{43,52,75,24,10,38,67,55,63,60}构造AVL树:  (2)输出用括号法表示的AVL树:  (3)查找关键字55:  ...

  3. 数据结构上机实践第14周项目1(2) - 验证算法(分块查找)

    验证算法(分块查找) 项目要求如下: 请用22,4,23,11,20,2,15,13,30,45,26,34,29,35,26,36,55,98,56, 74,61,90,80,96,127,158, ...

  4. 第十三周项目二-动物这样叫(1)

    /* *Copyright(c)2016,烟台大学计算机与控制工程学院 *All rights reserved *文件名称:123.cpp *作 者:王蕊 *完成日期:2016年5月31日 *版 本 ...

  5. 数据结构上机实践第14周项目3 - 是否二叉排序树

    是否二叉排序树? 项目要求如下: 设计一个算法,判断给定的二叉树是否是二叉排序树. int JudgeBST()是设计的算法对应的实现. 实现源代码如下: //*Copyright (c)2017,烟 ...

  6. 数据结构上机实践第14周项目2 - 二叉树排序树中查找的路径

    二叉树排序树中查找的路径 项目要求如下: 设计一个算法,输出在二叉排序中查找时查找某个关键字经过的路径.  专为本项目设计的算法体现在函数int SearchBST(-)和void SearchRes ...

  7. 数据结构上机实践第14周项目1(3) - 验证算法(二叉排序树)

    验证算法(二叉排序树) 项目要求如下: 认真阅读并验证二叉排序树相关算法.  (1)由整数序列{43,52,75,24,10,38,67,55,63,60}构造二叉排序树:  (2)输出用括号法表示的 ...

  8. 数据结构上机实践第14周项目1 - 验证算法(折半查找)

    验证算法(折半查找) 项目要求如下: 请用有序表{12,18,24,35,47,50,62,83,90,115,134}作为测试序列,分别对查找90.47.100进行测试. 实现源代码如下: //*C ...

  9. 第14周项目1——验证算法(平衡二叉树)

    问题及代码: /* *Copyright(c++)2015,烟台大学计算机与控制工程学院 *All rights reserved. *文件名称:CPP1.cpp *作者:宋 晨 *完成日期:2015 ...

  10. 第14周项目5-体会棋盘游戏中的数据存储

    /* * Copyright (c) 2014, 烟台大学计算机学院 * All rights reserved. * 文件名称:test.cpp * 作 者:刘畅 * 完成日期:2014 年 11 ...

最新文章

  1. springmvc进阶(5):mvc:default-servlet-handler详解
  2. Lesson 5.分类模型决策边界与模型评估指标
  3. Python_基础_5
  4. PHP实例——获取文件的绝对路径
  5. 实现工控机4U断电后自动重启功能
  6. 概率分布的熵归一化(Entropy Normalization)
  7. 通过git和Xcode将代码上传到GitHub
  8. leetcode 1002. 查找常用字符
  9. Oreo易支付程序开源源码分享发行版V1.3
  10. P3512 [POI2010]PIL-Pilots(单调队列+二分)
  11. [Java] 获取本月周次和日期时间段信息
  12. 在Excel中引用Visual Studio.NET 2008编写的COM组件
  13. 计算机二级考试office 教程,全国计算机等级考试一级office教程
  14. 【转】重装系统后找不到硬盘
  15. 常用oracle语句
  16. 文件批量改名特工 v1.0 怎么用
  17. 【程序员的吃鸡大法】利用OCR文字识别+百度算法搜索,玩转冲顶大会、百万英雄、芝士超人等答题赢奖金游戏...
  18. pr如何跳到关键帧_PR剪辑小问题汇总—新老司机都会遇到的!
  19. 【报告分享】城市女性独居调查-COSMODATA100(附下载)
  20. 计算机实验室行政助理职责,【实验室助理工作内容|工作职责|实验室助理做什么】-看准网...

热门文章

  1. C中计算梯形的面积(area)
  2. linux kvm 的虚拟机处于暂停状态怎么开机 和 KVM-Virsh指令
  3. DFA(deterministic finite automaton )有限状态机概念
  4. 微信公众号使用:在微信公众号文章中嵌入小程序的方法
  5. 计算机应用类型分类 余额宝属于,按计算机应用的类型分类,余额宝属于____。...
  6. 联想win7旗舰版忘记开机密码--有效处理办法
  7. 把tif文件转化成jpg格式报错已解决
  8. PHP+新浪微博开放平台+新浪云平台(SAE)
  9. Vue3简单实现元素周期表
  10. 有关access的上机试题_2016年计算机二级《Access》上机操作题及答案