迟到的十三周任务二 动物类派生各类 抽象类
2012-05-20 15:32
295 查看
2.1:
2.2 显然,Animal设计为抽象类更合适,Animal不需要能够实例化,是专门作基类使用的。改造程序,使Animal设计为抽象类,这时main()函数中p = new Animal();将出错,将此行删除。
2.3 每一个Animal的派生类都有一个“名字”数据成员,改造上面的程序,将这一数据成员作为抽象类Animal数据成员被各派生类使用。
最近各种事···结果把这个给落下了···现在补上
/* (程序头部注释开始) * 程序的版权和版本声明部分 * Copyright (c) 2011, 烟台大学计算机学院学生 * All rights reserved. * 文件名称: * 作 者: 姜雅明 * 完成日期: 2012 年 05 月 20 日 * 版 本 号: * 对任务及求解方法的描述部分 * 输入描述: * 问题描述: * 程序输出: * 程序头部的注释结束 */ #include "iostream" #include<string> using namespace std; class Animal { public: virtual void cry() {cout << "不知哪种动物,让我如何学叫?" << endl;} }; class Mouse:public Animal { protected: string name; public: Mouse (string name){this->name = name;} ; virtual void cry() {cout << "我叫" << name << ",是一只老鼠,我的叫声是:吱吱吱!\n";} }; class Cat:public Animal { protected: string name; public: Cat (string name){this->name = name;} ; virtual void cry() {cout << "我叫" << name << ",是一只猫,我的叫声是:喵喵喵!\n";} }; class Dog:public Animal { protected: string name; public: Dog (string name){this->name = name;} ; virtual void cry() {cout << "我叫" << name << ",是一只狗,我的叫声是:汪汪汪!\n";} }; class Giraffe:public Animal { protected: string name; public: Giraffe (string name) {this->name = name;} virtual void cry() {cout << "我叫" << name << ",是长颈鹿,脖子太长,发不出声音来!\n";} }; int main( ) { Animal *p; p = new Animal(); p->cry(); //输出: 不知哪种动物,让我如何学叫?(问题出自此处) Mouse m("Jerry"); p=&m; p->cry(); //输出: 我叫Jerry,是一只老鼠,我的叫声是:吱吱吱! Cat c("Tom"); p=&c; p->cry(); //输出: 我叫Tom,是一只猫,我的叫声是:喵喵喵! Dog d("Droopy"); p=&d; p->cry(); //输出: 我叫Droopy,是一条狗,我的叫声是:汪汪汪! Giraffe g("Gill"); p=&g; p->cry(); //输出: 我叫Gill,是长颈鹿,脖子太长,发不出声音来! system("pause"); return 0; }
2.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 { protected: string name; public: Mouse (string name){this->name = name;} ; virtual void cry() {cout << "我叫" << name << ",是一只老鼠,我的叫声是:吱吱吱!\n";} }; class Cat:public Animal { protected: string name; public: Cat (string name){this->name = name;} ; virtual void cry() {cout << "我叫" << name << ",是一只猫,我的叫声是:喵喵喵!\n";} }; class Dog:public Animal { protected: string name; public: Dog (string name){this->name = name;} ; virtual void cry() {cout << "我叫" << name << ",是一只狗,我的叫声是:汪汪汪!\n";} }; class Giraffe:public Animal { protected: string name; public: Giraffe (string name) {this->name = name;} virtual void cry() {cout << "我叫" << name << ",是长颈鹿,脖子太长,发不出声音来!\n";} }; int main( ) { Animal *p; //p = new Animal(); p->cry(); //输出: 不知哪种动物,让我如何学叫?(问题出自此处) Mouse m("Jerry"); p=&m; p->cry(); //输出: 我叫Jerry,是一只老鼠,我的叫声是:吱吱吱! Cat c("Tom"); p=&c; p->cry(); //输出: 我叫Tom,是一只猫,我的叫声是:喵喵喵! Dog d("Droopy"); p=&d; p->cry(); //输出: 我叫Droopy,是一条狗,我的叫声是:汪汪汪! Giraffe g("Gill"); p=&g; p->cry(); //输出: 我叫Gill,是长颈鹿,脖子太长,发不出声音来! system("pause"); return 0; }
2.3 每一个Animal的派生类都有一个“名字”数据成员,改造上面的程序,将这一数据成员作为抽象类Animal数据成员被各派生类使用。
/* (程序头部注释开始) * 程序的版权和版本声明部分 * Copyright (c) 2011, 烟台大学计算机学院学生 * All rights reserved. * 文件名称: * 作 者: 姜雅明 * 完成日期: 2012 年 05 月 20 日 * 版 本 号: * 对任务及求解方法的描述部分 * 输入描述: * 问题描述: * 程序输出: * 程序头部的注释结束 */ #include "iostream" #include<string> using namespace std; class Animal { protected: string name; public: Animal (string name) {this->name = name;} virtual void cry() = 0; }; class Mouse:public Animal { public: Mouse (string name):Animal(name){} virtual void cry() {cout << "我叫" << name << ",是一只老鼠,我的叫声是:吱吱吱!\n";} }; class Cat:public Animal { public: Cat (string name):Animal(name){} virtual void cry() {cout << "我叫" << name << ",是一只猫,我的叫声是:喵喵喵!\n";} }; class Dog:public Animal { public: Dog (string name):Animal(name){} virtual void cry() {cout << "我叫" << name << ",是一只狗,我的叫声是:汪汪汪!\n";} }; class Giraffe:public Animal { public: Giraffe (string name):Animal(name){} virtual void cry() {cout << "我叫" << name << ",是长颈鹿,脖子太长,发不出声音来!\n";} }; int main( ) { Animal *p; //p = new Animal(); p->cry(); //输出: 不知哪种动物,让我如何学叫?(问题出自此处) Mouse m("Jerry"); p=&m; p->cry(); //输出: 我叫Jerry,是一只老鼠,我的叫声是:吱吱吱! Cat c("Tom"); p=&c; p->cry(); //输出: 我叫Tom,是一只猫,我的叫声是:喵喵喵! Dog d("Droopy"); p=&d; p->cry(); //输出: 我叫Droopy,是一条狗,我的叫声是:汪汪汪! Giraffe g("Gill"); p=&g; p->cry(); //输出: 我叫Gill,是长颈鹿,脖子太长,发不出声音来! system("pause"); return 0; }
最近各种事···结果把这个给落下了···现在补上
相关文章推荐
- 十三周任务四:设计一个抽象类CSolid,含有两个求表面积及体积的纯虚函数
- 十三周(三)定义抽象类shape,由它派生出三个派生类Circle,Rectangle,Triangle
- 十三周任务2
- 十三周(四)设计抽象类CSolid,含有两个求表面积和体积的纯虚函数
- 13 周 任务四 设计抽象类
- 十三周任务三
- 十三周任务三 Sharp Circle Rectangle Triangle
- 《第十二周任务二》分别定义Teacher(教师)类和Cadre(干部)类,采用多重继承方式由这两个类派生出新类Teacher_Cadre
- 13周任务二:动物类
- 第13周-任务4-抽象类CSolid及派生类CCube、CBall、CCylinder
- 十三周任务四
- 十三周任务四 Csolid CBox CBall CCylinder
- C#--第四周实验--任务4--定义一个描述坐标点的CPoint类,派生出直线类Cline,在派生出矩形类CRect,实现一些功能。
- 第十三周项目三——立体类族共有的抽象类
- 设计一个“航空器”抽象类,由它派生出两个子类:“运输机”类和“客机”类
- python基础之类的继承与派生、组合、接口与归一化设计、抽象类、子类中调用父类方法
- 第13周-任务4-抽象类CSolid及派生类CCube、CBall、CCylinder
- C++第十三周【任务1】开车学习虚函数、多态性和抽象类的应用
- 《第十三周任务二-----2.3》改造程序,使Animal设计为抽象类。将这一数据成员作为抽象类Animal数据成员被各派生类使用
- 第十四周 项目二:定义抽象类Shape,由此派生出Circle(圆形)、Rectangle(矩形)、Triangle(三角形)