[cpp] /*
【項目1】根據給出的基類Animal和main()函數。
1、根據給出的main()函數和運行結果的提示,設計出相關的各個類,注意觀察運行結果,提取出每個類中需要的數據成員,並匹配上需要的成員函數。
2、顯然,Animal設計為抽象類更合適,Animal不需要能夠實例化,是專門作基類使用的。改造程序,使Animal設計為抽象類,這時main()函數中p = new Animal();將出錯,將此行刪除。
3、每一個Animal的派生類都有一個“名字”數據成員,這一共有的成員完全可以由基類提供改造上面的程序,將這一數據成員作為抽象類Animal數據成員被各派生類使用。
下面是給出的基類Animal和main()函數:
*/
/*
* Copyright (c) 2013, 煙台大學計算機學院
* All rights reserved.
* 文件名稱:test.cpp
* 作者:邱學偉
* 完成日期:2013 年 5 月 31 日
* 版本號:v1.0
* 輸入描述:無
* 問題描述:
* 程序輸出:
* 問題分析:
* 算法設計:略
*/
#include <iostream>
using namespace std;
class Animal
{
public:
virtual void cry()
{
cout<<"不知哪種動物,讓我如何學叫?"<<endl;
}
};
class Mouse:public Animal
{
public:
Mouse(string n,char s);
void cry();
private:
string name;
char sex;
};
Mouse::Mouse(string n,char s)
{
name=n;
sex=s;
}
void Mouse::cry()
{
if(sex=='m')
cout<<"我叫"<<name<<",我是一只男老鼠,我的叫聲是”吱吱吱“"<<endl;
if(sex=='f')
cout<<"我叫"<<name<<",我是一只女老鼠,我的叫聲是”吱吱吱“"<<endl;
}
class Cat:public Animal
{
public:
Cat(string n,char s);
void cry();
private:
string name;
char sex;
};
Cat::Cat(string n,char s):name(n),sex(s) {}
void Cat::cry()
{
if(sex=='m')
cout<<"我叫"<<name<<",我是一只公貓,我的叫聲是”喵喵喵“"<<endl;
if(sex=='f')
cout<<"我叫"<<name<<",我是一只母貓,我的叫聲是”喵喵喵“"<<endl;
}
class Dog:public Animal
{
public:
Dog(string n);
void cry();
private:
string name;
};
Dog::Dog(string n):name(n) {}
void Dog::cry()
{
cout<<"我是一只狗,我的叫聲是“汪汪汪”"<<endl;
}
class Giraffe:public Animal
{
public:
Giraffe(string n,char s);
void cry();
private:
string name;
char sex;
};
Giraffe::Giraffe(string n,char s):name(n),sex(s) {}
void Giraffe::cry()
{
cout<<"我叫"<<name<<",我是一只長頸鹿,我的脖子太長,發不出聲音來"<<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",'f');
p=&c1;
p->cry();
Dog d1("Droopy");
p=&d1;
p->cry();
Giraffe g1("Gill",'m');
p=&g1;
p->cry();
return 0;
}
/*
【項目1】根據給出的基類Animal和main()函數。
1、根據給出的main()函數和運行結果的提示,設計出相關的各個類,注意觀察運行結果,提取出每個類中需要的數據成員,並匹配上需要的成員函數。
2、顯然,Animal設計為抽象類更合適,Animal不需要能夠實例化,是專門作基類使用的。改造程序,使Animal設計為抽象類,這時main()函數中p = new Animal();將出錯,將此行刪除。
3、每一個Animal的派生類都有一個“名字”數據成員,這一共有的成員完全可以由基類提供改造上面的程序,將這一數據成員作為抽象類Animal數據成員被各派生類使用。
下面是給出的基類Animal和main()函數:
*/
/*
* Copyright (c) 2013, 煙台大學計算機學院
* All rights reserved.
* 文件名稱:test.cpp
* 作者:邱學偉
* 完成日期:2013 年 5 月 31 日
* 版本號:v1.0
* 輸入描述:無
* 問題描述:
* 程序輸出:
* 問題分析:
* 算法設計:略
*/
#include <iostream>
using namespace std;
class Animal
{
public:
virtual void cry()
{
cout<<"不知哪種動物,讓我如何學叫?"<<endl;
}
};
class Mouse:public Animal
{
public:
Mouse(string n,char s);
void cry();
private:
string name;
char sex;
};
Mouse::Mouse(string n,char s)
{
name=n;
sex=s;
}
void Mouse::cry()
{
if(sex=='m')
cout<<"我叫"<<name<<",我是一只男老鼠,我的叫聲是”吱吱吱“"<<endl;
if(sex=='f')
cout<<"我叫"<<name<<",我是一只女老鼠,我的叫聲是”吱吱吱“"<<endl;
}
class Cat:public Animal
{
public:
Cat(string n,char s);
void cry();
private:
string name;
char sex;
};
Cat::Cat(string n,char s):name(n),sex(s) {}
void Cat::cry()
{
if(sex=='m')
cout<<"我叫"<<name<<",我是一只公貓,我的叫聲是”喵喵喵“"<<endl;
if(sex=='f')
cout<<"我叫"<<name<<",我是一只母貓,我的叫聲是”喵喵喵“"<<endl;
}
class Dog:public Animal
{
public:
Dog(string n);
void cry();
private:
string name;
};
Dog::Dog(string n):name(n) {}
void Dog::cry()
{
cout<<"我是一只狗,我的叫聲是“汪汪汪”"<<endl;
}
class Giraffe:public Animal
{
public:
Giraffe(string n,char s);
void cry();
private:
string name;
char sex;
};
Giraffe::Giraffe(string n,char s):name(n),sex(s) {}
void Giraffe::cry()
{
cout<<"我叫"<<name<<",我是一只長頸鹿,我的脖子太長,發不出聲音來"<<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",'f');
p=&c1;
p->cry();
Dog d1("Droopy");
p=&d1;
p->cry();
Giraffe g1("Gill",'m');
p=&g1;
p->cry();
return 0;
}