C++第14周项目1 - 动物怎么叫
课程首页地址:http://blog.csdn.net/sxhelijian/article/details/7910565,本周题目链接:http://blog.csdn.net/sxhelijian/article/details/8987478
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 - 动物怎么叫相关推荐
- 第14周项目1 - 动物怎么叫
/* *程序的版权和版本声明部分: *Copyright(c)2013,烟台大学计算机学院学生 . *All rights reserved. *作者:李家豪 *完成日期:2014年6月3号. *版本 ...
- 数据结构上机实践第14周项目1(4) - 验证算法(平衡二叉树)
验证算法(平衡二叉树) 项目要求如下: (1)由整数序列{43,52,75,24,10,38,67,55,63,60}构造AVL树: (2)输出用括号法表示的AVL树: (3)查找关键字55: ...
- 数据结构上机实践第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, ...
- 第十三周项目二-动物这样叫(1)
/* *Copyright(c)2016,烟台大学计算机与控制工程学院 *All rights reserved *文件名称:123.cpp *作 者:王蕊 *完成日期:2016年5月31日 *版 本 ...
- 数据结构上机实践第14周项目3 - 是否二叉排序树
是否二叉排序树? 项目要求如下: 设计一个算法,判断给定的二叉树是否是二叉排序树. int JudgeBST()是设计的算法对应的实现. 实现源代码如下: //*Copyright (c)2017,烟 ...
- 数据结构上机实践第14周项目2 - 二叉树排序树中查找的路径
二叉树排序树中查找的路径 项目要求如下: 设计一个算法,输出在二叉排序中查找时查找某个关键字经过的路径. 专为本项目设计的算法体现在函数int SearchBST(-)和void SearchRes ...
- 数据结构上机实践第14周项目1(3) - 验证算法(二叉排序树)
验证算法(二叉排序树) 项目要求如下: 认真阅读并验证二叉排序树相关算法. (1)由整数序列{43,52,75,24,10,38,67,55,63,60}构造二叉排序树: (2)输出用括号法表示的 ...
- 数据结构上机实践第14周项目1 - 验证算法(折半查找)
验证算法(折半查找) 项目要求如下: 请用有序表{12,18,24,35,47,50,62,83,90,115,134}作为测试序列,分别对查找90.47.100进行测试. 实现源代码如下: //*C ...
- 第14周项目1——验证算法(平衡二叉树)
问题及代码: /* *Copyright(c++)2015,烟台大学计算机与控制工程学院 *All rights reserved. *文件名称:CPP1.cpp *作者:宋 晨 *完成日期:2015 ...
- 第14周项目5-体会棋盘游戏中的数据存储
/* * Copyright (c) 2014, 烟台大学计算机学院 * All rights reserved. * 文件名称:test.cpp * 作 者:刘畅 * 完成日期:2014 年 11 ...
最新文章
- springmvc进阶(5):mvc:default-servlet-handler详解
- Lesson 5.分类模型决策边界与模型评估指标
- Python_基础_5
- PHP实例——获取文件的绝对路径
- 实现工控机4U断电后自动重启功能
- 概率分布的熵归一化(Entropy Normalization)
- 通过git和Xcode将代码上传到GitHub
- leetcode 1002. 查找常用字符
- Oreo易支付程序开源源码分享发行版V1.3
- P3512 [POI2010]PIL-Pilots(单调队列+二分)
- [Java] 获取本月周次和日期时间段信息
- 在Excel中引用Visual Studio.NET 2008编写的COM组件
- 计算机二级考试office 教程,全国计算机等级考试一级office教程
- 【转】重装系统后找不到硬盘
- 常用oracle语句
- 文件批量改名特工 v1.0 怎么用
- 【程序员的吃鸡大法】利用OCR文字识别+百度算法搜索,玩转冲顶大会、百万英雄、芝士超人等答题赢奖金游戏...
- pr如何跳到关键帧_PR剪辑小问题汇总—新老司机都会遇到的!
- 【报告分享】城市女性独居调查-COSMODATA100(附下载)
- 计算机实验室行政助理职责,【实验室助理工作内容|工作职责|实验室助理做什么】-看准网...
热门文章
- C中计算梯形的面积(area)
- linux kvm 的虚拟机处于暂停状态怎么开机 和 KVM-Virsh指令
- DFA(deterministic finite automaton )有限状态机概念
- 微信公众号使用:在微信公众号文章中嵌入小程序的方法
- 计算机应用类型分类 余额宝属于,按计算机应用的类型分类,余额宝属于____。...
- 联想win7旗舰版忘记开机密码--有效处理办法
- 把tif文件转化成jpg格式报错已解决
- PHP+新浪微博开放平台+新浪云平台(SAE)
- Vue3简单实现元素周期表
- 有关access的上机试题_2016年计算机二级《Access》上机操作题及答案