第十三周任务(二)

来源:互联网 发布:淘宝服装店推广 编辑:程序博客网 时间:2024/06/07 15:27
* (程序头部注释开始)                    * 程序的版权和版本声明部分                                  * Copyright (c) 2011, 烟台大学计算机学院学生                                  * All rights reserved.                                 * 文件名称:根据已给程序设计程序类  [cpp] view plaincopy* 作 者:齐艳红                                 * 完成日期: 2011年 5月 15日                                 * 版 本 号:                                  * 对任务及求解方法的描述部分:                                  *问题描述:根据基类给出派生类,补充完整#include "iostream"#include<string>using namespace std;class Animal{public:virtual void cry() {cout<<"不知哪种动物,让我如何学叫?"<<endl;}};class Mouse:public Animal{public:Mouse(string n):name(n){}       void cry() {cout<<"我叫"<<name<<",是一只老鼠,我的叫声是:吱吱吱!"<<endl;}private:string name;};class Cat:public Animal{public:     Cat(string n):name(n){}     void cry() {cout<<"我叫"<<name<<",是一只猫,我的叫声是:喵喵喵!"<<endl;}private:string name;};class Dog:public Animal{public:Dog(string n):name(n){}     void cry() {cout<<"我叫"<<name<<",是一只狗,我的叫声是:汪汪汪!"<<endl;}private:string name;};class Giraffe:public Animal{public:     Giraffe(string n):name(n){}     void cry() {cout<<"我叫"<<name<<",是一只长颈鹿,我的脖子太长,发不出声音!"<<endl;}private:string name;};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;}不知哪种动物,让我如何学叫?我叫Jerry,是一只老鼠,我的叫声是:吱吱吱!我叫Tom,是一只猫,我的叫声是:喵喵喵!我叫Droopy,是一只狗,我的叫声是:汪汪汪!我叫Gill,是一只长颈鹿,我的脖子太长,发不出声音!请按任意键继续. . .(二)#include "iostream"#include<string>using namespace std;class Animal{public:virtual void cry() const =0;};class Mouse:public Animal{public:Mouse(string n):name(n){}       virtual void cry() const{cout<<"我叫"<<name<<",是一只老鼠,我的叫声是:吱吱吱!"<<endl;}private:string name;};class Cat:public Animal{public:     Cat(string n):name(n){}     virtual void cry() const{cout<<"我叫"<<name<<",是一只猫,我的叫声是:喵喵喵!"<<endl;}private:string name;};class Dog:public Animal{public:Dog(string n):name(n){}     virtual void cry() const{cout<<"我叫"<<name<<",是一只狗,我的叫声是:汪汪汪!"<<endl;}private:string name;};class Giraffe:public Animal{public:     Giraffe(string n):name(n){}     virtual void cry() const{cout<<"我叫"<<name<<",是一只长颈鹿,我的脖子太长,发不出声音!"<<endl;}private:string name;};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;}我叫Jerry,是一只老鼠,我的叫声是:吱吱吱!我叫Tom,是一只猫,我的叫声是:喵喵喵!我叫Droopy,是一只狗,我的叫声是:汪汪汪!我叫Gill,是一只长颈鹿,我的脖子太长,发不出声音!请按任意键继续. . .(三)
#include "iostream"#include<string>using namespace std;class Animal{protected:string name;public:    Animal(string n):name(n){}virtual void cry()=0 ;//设置为抽象类};class Mouse:public Animal{public:Mouse(string n):Animal(n){}     virtual  void cry() {cout<<"我叫"<<name<<",是一只老鼠,我的叫声是:吱吱吱!"<<endl;}};class Cat:public Animal{public:     Cat(string n):Animal(n){}    virtual void cry() {cout<<"我叫"<<name<<",是一只猫,我的叫声是:喵喵喵!"<<endl;}};class Dog:public Animal{public:Dog(string n):Animal(n){}    virtual void cry() {cout<<"我叫"<<name<<",是一只狗,我的叫声是:汪汪汪!"<<endl;}};class Giraffe:public Animal{public:     Giraffe(string n):Animal(n){}    virtual void cry() {cout<<"我叫"<<name<<",是一只长颈鹿,我的脖子太长,发不出声音!"<<endl;}};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;}
总结:这三个小程序却涵盖了三个内容,(1)设计相关的类:将基类派生类结合复习,派生类继承基类的内容,形式等,(2)设计基类为抽象类,此时程序中基类必须含有一个纯虚函数,才能构成抽象类,因此设计了:virtual void cry() const =0;(3)要节省时间资源,将基类中数据成员能被每一个派生类使用因此设计:
  1. protected:  
  2.     string name;构造函数:Animal(string n):name(n){} 而派生类中则应声明:动物名称+(string n):Animal(n){},此时减少了每个派生类中都要声明的数据成员的必要····
 
	
				
		
原创粉丝点击