下面给出的基类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()函数和运行结果的提示,设计出相关的各个类,注意观察运行结果,提取出每个类中需要的数据成员,并匹配上需要的成员函数。

解答:

#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的成员更好。改造上面的程序,将“名字”成员作为抽象类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;
}

【VC小项目】-13.1动物可以这样叫相关推荐

  1. 100个vc小项目开发:二、一步一点设计音乐播放器 [I]

    100个vc小项目开发:二.一步一点设计音乐播放器 [源码解读] 文章作者: July 软件来源:开源 ================== 1.有不正之处,恳请指正. 2.本文贴出的是关键实现代码部 ...

  2. java基础小项目_java基础小项目练习之1----3天做出飞机大战

    Shoot射击游戏第一天 一.关键问题(理论): 1.简述FlyingObject.Enemy.Award.Airplane.Bee.Bullet.Hero之间的继承与实现关系 2.简述Hero类构造 ...

  3. VC学习资料收集(12):VC小知识总结

    VC小知识总结! (1) 如何通过代码获得应用程序主窗口的 指针? 主窗口的 指针保存在CWinThread::m_pMainWnd中,调用AfxGetMainWnd实现. AfxGetMainWnd ...

  4. ios小项目——新浪微博客户端总结

    2019独角兽企业重金招聘Python工程师标准>>> 们还是登录不了,你们要用还是得自己申请appkey并且把回调网址设为baidu.或者是再下面留言,留下你的微博uid我把你加入 ...

  5. java web 图书管理系统_图书管理系统,源代码 Java初级小项目

    今天再给大家分享一个小项目:MiNi图书管理系统.用的是Java语言开发的,代码不多,大概260行左右吧,系统是实现图书的新增图书.删除图书.借阅图书.归还图书.查看图书等简单的功能(后附源代码)! ...

  6. VC小技巧汇总之对话框技巧

    这篇文章主要介绍了VC小技巧汇总之对话框技巧,非常实用!对于进行VC开发有一定的参考借鉴价值,需要的朋友可以参考下 本文搜集汇总了VC中关于对话框常用的一些技巧,对于进行VC开发由于一定的参考借鉴价值 ...

  7. Android 小项目之--Mini音乐播放器【简单版】(附源码)

    上篇文章讲服务的例子中,有个演示服务的后台播放音乐,今天就来讲一讲多媒体之一的音乐播放. 说到多媒体不得不向上追溯,空间多媒体是如何实现的,如何可以让我们轻松的播放音乐.视频?本章讲述点大致如下: 1 ...

  8. 初学C语言没有项目练手怎么行,这17个小项目收下不谢

    C语言是我们大多数人的编程入门语言,对其也再熟悉不过了,不过很多初学者在学习的过程中难免会出现迷茫,比如:不知道C语言可以开发哪些项目,可以应用在哪些实际的开发中--,这些迷茫也导致了我们在学习的过程 ...

  9. 『飞秋』小项目心得交流

    『飞秋』小项目心得交流 <!--[endif]--> 最近网站首页改版,我负责前台页面的编写,一个很小的任务,从中我却学习到了很多东西,现总结一下 和大家分享一下,希望对大家有用,也希望能 ...

最新文章

  1. 智能,万亿维空间中的求解
  2. 再造一个爱因斯坦?GPT-3 让我看到了名人“重生”的希望
  3. 借助acs来实现telnet、ssh的远程认证
  4. UESTC 1698 The Game
  5. html 手机访问优化,移动端首屏优化
  6. 【Hadoop Summit Tokyo 2016】一小时之内使用Apache Nifi从零到数据流
  7. mac linux win三系统安装教程,【教程】Windows、Linux、MacOS安装adb工具的方法
  8. 关于Itext 报错-java.lang.NoClassDefFoundError: org/bouncycastle/asn1/ASN1Encodable
  9. 查纸张开数软件怎么样
  10. 如何提高技术团队协作能力
  11. php语言的应用领域,探讨主要的PHP应用领域
  12. mysql 库损坏恢复数据方法
  13. NAO机器人的Walk功能
  14. redis集群介绍与搭建
  15. VoNR来了,它到底是什么技术?
  16. CF362C Insertion Sort树状数组,思维,枚举
  17. 如何通过网页查看真机或者虚拟机的数据库
  18. linux kangle漏洞,Kangle EP漏洞:多个EP主机可重复绑定域名,挂黑页的bug解析
  19. 微信小游戏投放创角没有数据上报?
  20. 刘韧:Blog改变着网络媒体

热门文章

  1. (三)初识打印机驱动
  2. Bugku crypto 入门题之聪明的小羊
  3. 计算机系统实验四:二进制程序逆向工程
  4. php正则子模式贪婪,php关于正则表达式贪婪模式与非贪婪
  5. python怎么生成词云图
  6. vlan(三种模式)实验
  7. 2020cvpr最佳人脸识别-Suppressing Uncertainties for Large-Scale Facial Expression Recognition
  8. 安装Git后,鼠标右键没有Git bush here的解决办法
  9. 【Linux】VNC xfc4安装指导
  10. 活动报名|ICLR 2023杰出论文奖一作张博航:从图双连通性的角度重新思考图神经网络的表达能力...