/*
* Copyright (c) 2011, 烟台大学计算机学院
* All rights reserved.
* 作    者:王静
* 完成日期:2013  年 6  月  2  日
* 版 本 号:v1.0
* 输入描述:
* 问题描述:1、根据给出的main()函数和运行结果的提示,设计出相关的各个类,注意观察运行结果,提取出每个类中需要的数据成员,并
匹配上需要的成员函数。
2、显然,Animal设计为抽象类更合适,Animal不需要能够实例化,是专门作基类使用的。改造程序,使Animal设计为抽象类,这时
main()函数中p = newAnimal();将出错,将此行删除。
3、每一个Animal的派生类都有一个“名字”数据成员,这一共有的成员完全可以由基类提供改造上面的程序,将这一数据成员作为抽
象类Animal数据成员被各派生类使用。
* 程序输出:
* 问题分析:
* 算法设计:略
*/
#include <iostream>
#include <string>
using namespace std;
class Animal
{
public:
Animal(string n):name(n){}
virtual void cry()
{
cout<<"不知哪种动物,让我如何学叫?"<<endl;
}
protected:
string name;
};
class Mouse:public Animal
{
public:
Mouse(string n,char s):Animal(n),sex(s){}
void cry()
{
cout<<"我叫"<<name<<",是一只";
if(sex='m')cout<<"男";
else cout<<"女";
cout<<"老鼠,我的叫声是:吱吱吱!"<<endl;
}
char sex;
};
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
{
public:
Giraffe(string n,char s):Animal(n),sex(s){}
void cry()
{
cout<<"我叫"<<name<<",是";
if(sex='m')cout<<"男";
else cout<<"女";
cout<<"长颈鹿,我的脖子太长,发不出声音来!"<<endl;
}
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;
}

运行结果:

第十四周 项目1抽象基类相关推荐

  1. 项目2抽象基类与派生类

    /* * Copyright (c) 2011, 烟台大学计算机学院 * All rights reserved. * 作 者:王静 * 完成日期:2013 年 6 月 2 日 * 版 本 号:v1. ...

  2. C++之继承探究(十):抽象基类与纯虚函数

    前文:C++之继承探究(九):多态的代价 抽象基类与纯虚函数   ♠\spadesuit♠ 纯虚函数:虚函数只有声明,函数体=0,就是一个纯虚函数,纯虚函数没有函数体,不需要实现.在子类里实现纯虚函数 ...

  3. c++程序设计十二章第5题5 写一个程序,定义抽象基类shape由它派生出5个派生类:Circle(圆形),Square(正方形),Rectangle(矩形),Trapezoid(梯形),Tr

    写一个程序,定义抽象基类shape由它派生出5个派生类:Circle(圆形),Square(正方形),Rectangle(矩形),Trapezoid(梯形),Triangle(三角形).用虚函数分别计 ...

  4. C++ day24 继承(四)抽象基类,纯虚函数,protected

    文章目录 关键字protected(带来方便同时带来危险,最好不用) 抽象基类和纯虚函数(is-a关系用公有继承实现有时候也不太合适) 用圆和椭圆的笨拙派生为例,挑拨is-a和公有继承的搭档关系 替代 ...

  5. Python:抽象基类(abc模块)

    抽象基类(abc模块) 介绍 白话理解 实用场景 介绍 该模块提供了一个元类 ABCMeta,可以用来定义抽象类,另外还提供一个工具类 ABC,可以用它以继承的方式定义抽象基类. 装饰器以" ...

  6. Java高级:IO流、File类、抽象基类、节点流、缓冲流、图片加密、其他流、对象流、随机存取文件流

    package com.atguigu.java3;import org.junit.Test;import java.io.File; import java.io.IOException; imp ...

  7. Python学习笔记28:从协议到抽象基类

    Python学习笔记28:从协议到抽象基类 今后本系列笔记的示例代码都将存放在Github项目:https://github.com/icexmoon/python-learning-notes 在P ...

  8. 【JavaSE8 高级编程 IO/NIO】IO入门系列①之抽象基类节点流转换流 2019_8_16

    IO输入输出 IO 实现体系概述 [文档级] ①IO基石 四抽象基类 [IS,OS / R,W]抽象基类简述 子类及其实现接口 字节(FIS,OIS)字符(BR,ISR)读 字节(FOS,OOS,PS ...

  9. python之抽象基类

    抽象基类特点 1.不能够实例化 2.在这个基础的类中设定一些抽象的方法,所有继承这个抽象基类的类必须覆盖这个抽象基类里面的方法 思考 既然python中有鸭子类型,为什么还要使用抽象基类? 一是我们在 ...

最新文章

  1. 美特斯邦威java面试_在美特斯邦威工作一个月,我学到了什么
  2. 解决Tomcat运行springboot打包war工程,出现: Unable to compile class for JSP 的问题
  3. 笔记(用Python做些事情)--变量(数字、字符串)
  4. Angular单元测试fixture.detectChanges()
  5. HttpSession 和 HttpSession
  6. 经典面试题(34):以下代码将输出的结果是什么?
  7. Mybatis(10)properties标签的使用及细节,typeAliases和package标签
  8. xlwt边框与边框颜色
  9. 2019年老电脑E5450+硬改775 无故死机故障排除记录
  10. 集合与数组,集合与集合之间的转换
  11. maven打包常用命令总结
  12. 如何获取每周的星期一和星期天的日期
  13. MAVEN工程引入p6spy打印sql语句日志(Spring+mybatis)
  14. java怎么打印反三角形_Java基础练习——打印正反三角形
  15. 安卓手机怎么root_手机怎么root
  16. OCR识别提取图片中文字原理
  17. 磨刀不误砍柴工(四)-IDEA常用快捷键
  18. 规则引擎相关开源项目总结
  19. 如何查看计算机是多少位
  20. xRM 扩展性及产品组合

热门文章

  1. 黑客丛林通关攻略参考(更新中)
  2. 2009最新山东省百强企业排名
  3. 首席新媒体黎想告诉你,不花钱做互联网推广!这些方式了解一下
  4. Object-C,文件路径API
  5. 如何判断两条直线是否相交
  6. 怎样理解ZBrush中的2.5D绘画
  7. MLIR深入 —— 转换流程详解(以Toy接入为例)
  8. 计算机网络第七版(谢希仁)第三章——数据链路层课后习题答案
  9. 使用 Amazon Deep Learning AMI 快速实现 CUDA,cuDNN 和深度学习框架版本兼容
  10. Jdon DDD分析法