第十三周实验报告2

实验目的:

【任务2】下面给出了基类Animal和main()函数。

(任务2.1)根据main()函数给出的注释提示,设计出相关的各个类。

(任务2.2)显然,Animal设计为抽象类更合适,Animal不需要能够实例化,是专门作基类使用的。改造程序,使Animal设计为抽象类,这时main()函数中p = new Animal();将出错,将此行删除。

(任务2.3)每一个Animal的派生类都有一个“名字”数据成员,改造上面的程序,将这一数据成员作为抽象类Animal数据成员被各派生类使用。

实验代码:

#include <iostream>

#include <string>

using namespace std;

class Animal
{
public:
	virtual void cry() {cout << "不知道哪种动物,让我如何叫? " << endl;}
};

class Mouse:public Animal
{
public:
	Mouse(string name)
	{
		this->name = name;
	}
	virtual void cry() {cout << "我叫" << name << ", 是一只老鼠,我的叫声是:吱吱吱!" << endl;}
private:
	string name;
};

class Cat:public Animal
{
public:
	Cat(string name)
	{
		this->name = name;
	}
	virtual void cry() {cout << "我叫" << name << ", 是一只猫,我的叫声是:喵喵喵!" << endl;}
private:
	string name;
};

class Dog:public Animal
{
public:
	Dog(string name)
	{
		this->name = name;
	}
	virtual void cry() {cout << "我叫" << name << ", 是一只狗,我的叫声是:汪汪汪!" << endl;}
private:
	string name;
};

class Giraffe:public Animal
{
public:
	Giraffe(string name)
	{
		this->name = name;
	}
	virtual void cry() {cout << "我叫" << name << ", 是长颈鹿,脖子太长,发不出声音来!" << endl;}
private:
	string name;
};

int main()
{
	Animal *p;
	p = new Animal();
	p->cry();

	Mouse m("Jerry");
	p = &m;
	p->cry();

	Cat c("Tom");
	p = &c;
	p->cry();

	Dog d("Droopy");
	p = &d;
	p->cry();

	Giraffe g("Gill");
	p = &g;
	p->cry();
	

	return 0;
}
实验结果:

不知道哪种动物,让我如何叫?
我叫Jerry, 是一只老鼠,我的叫声是:吱吱吱!
我叫Tom, 是一只猫,我的叫声是:喵喵喵!
我叫Droopy, 是一只狗,我的叫声是:汪汪汪!
我叫Gill, 是长颈鹿,脖子太长,发不出声音来!
Press any key to continue

1.2实验代码:

#include <iostream>

#include <string>

using namespace std;

class Animal
{
public:
	virtual void cry() const = 0;
};

class Mouse:public Animal
{
public:
	Mouse(string name)
	{
		this->name = name;
	}
	virtual void cry() const {cout << "我叫" << name << ", 是一只老鼠,我的叫声是:吱吱吱!" << endl;}
private:
	string name;
};

class Cat:public Animal
{
public:
	Cat(string name)
	{
		this->name = name;
	}
	virtual void cry() const {cout << "我叫" << name << ", 是一只猫,我的叫声是:喵喵喵!" << endl;}
private:
	string name;
};

class Dog:public Animal
{
public:
	Dog(string name)
	{
		this->name = name;
	}
	virtual void cry() const {cout << "我叫" << name << ", 是一只狗,我的叫声是:汪汪汪!" << endl;}
private:
	string name;
};

class Giraffe:public Animal
{
public:
	Giraffe(string name)
	{
		this->name = name;
	}
	virtual void cry() const {cout << "我叫" << name << ", 是长颈鹿,脖子太长,发不出声音来!" << endl;}
private:
	string name;
};

int main()
{
	Animal *p;
	
	Mouse m("Jerry");
	p = &m;
	p->cry();

	Cat c("Tom");
	p = &c;
	p->cry();

	Dog d("Droopy");
	p = &d;
	p->cry();

	Giraffe g("Gill");
	p = &g;
	p->cry();
	system("pause");
	
	return 0;
}

运行结果:

我叫Jerry, 是一只老鼠,我的叫声是:吱吱吱!
我叫Tom, 是一只猫,我的叫声是:喵喵喵!
我叫Droopy, 是一只狗,我的叫声是:汪汪汪!
我叫Gill, 是长颈鹿,脖子太长,发不出声音来!
Press any key to continue
实验2.3代码:

#include <iostream>

#include <string>

using namespace std;

class Animal
{
private:
	string name;
public:
	Animal(string name)
	{
		this->name = name;
	}
	virtual void cry() const = 0;
};

class Mouse:public Animal
{
public:
	Mouse(string name):Animal(name)
	{
		this->name = name;
	}
	virtual void cry() const {cout << "我叫" << name << ", 是一只老鼠,我的叫声是:吱吱吱!" << endl;}
private:
	string name;
};

class Cat:public Animal
{
public:
	Cat(string name):Animal(name)
	{
		this->name = name;
	}
	virtual void cry() const {cout << "我叫" << name << ", 是一只猫,我的叫声是:喵喵喵!" << endl;}
private:
	string name;
};

class Dog:public Animal
{
public:
	Dog(string name):Animal(name)
	{
		this->name = name;
	}
	virtual void cry() const {cout << "我叫" << name << ", 是一只狗,我的叫声是:汪汪汪!" << endl;}
private:
	string name;
};

class Giraffe:public Animal
{
public:
	Giraffe(string name):Animal(name)
	{
		this->name = name;
	}
	virtual void cry() const {cout << "我叫" << name << ", 是长颈鹿,脖子太长,发不出声音来!" << endl;}
private:
	string name;
};

int main()
{
	Animal *p;
	
	Mouse m("Jerry");
	p = &m;
	p->cry();

	Cat c("Tom");
	p = &c;
	p->cry();

	Dog d("Droopy");
	p = &d;
	p->cry();

	Giraffe g("Gill");
	p = &g;
	p->cry();
	system("pause");
	
	return 0;
}

实验结果:

我叫Jerry, 是一只老鼠,我的叫声是:吱吱吱!
我叫Tom, 是一只猫,我的叫声是:喵喵喵!
我叫Droopy, 是一只狗,我的叫声是:汪汪汪!
我叫Gill, 是长颈鹿,脖子太长,发不出声音来!
请按任意键继续. . .

实验心得:

实验的第一问还是挺简单的,在老师给的代码的基础上,主要是根据主函数,添加代码就可以了,单纯的虚函数罢了,看好课本相关章节,这个问题真的挺简单的,第二个实验是在第一问的基础上进行改造,将基类改为抽象类,也只是进行略微的修改,注意在派生类里面对纯虚函数进行再定义就是了,其他照搬问题一就好了,至于实验三,看来老师真的是很有心思,还刻意在实验中想方设法的给我们机会回顾以前的知识,只需根据要求,在基函数中增加数据成员,在派生类中继承就可以了,这也是以前做过的问题,看就看你能不能想到喽!


 

评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值