c++继承实验报告
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
c++继承实验报告
一、实验目的
通过本次实验,我们的目的是深入了解C++中的继承概念及其运用,了解C++中的多态及其实现。
二、实验内容
本次实验的主要内容是:
1. 完成一个基类Animal和两个派生类Cat、Dog,实现不同动物的基本属性,如年龄、体重、颜色等。
2. 完成一个动物园类Zoo,该类包含了一个动物园实例的属性,如名称和所含动物的数量,该类还能展示动物园里的所有动物的信息,如年龄、体重、颜色等。
3. 基于上述,实现两个派生类WildZoo和PetZoo,其中WildZoo的动物全是野生动物,而PetZoo的动物全是宠物动物。
4. 扩展以上功能,实现运算符重载,比较两个动物园中的动物的数量。
5. 扩展以上功能,实现动物类中的虚函数和多态,并在动物园类中调用虚函数。
三、实验设计
1. Animal类设计
Animal类作为基类,主要实现各种动物的基本属性,如样例代码:
```c++
class Animal
{
public:
Animal(int age, float weight, string color);
virtual void sound();
private:
int m_age;
float m_weight;
string m_color;
};
```
在此基础上,两个派生类Cat和Dog重写了sound方法,使其发出“喵喵”和“汪汪”声。
如样例代码:
2. Zoo类设计
Zoo类作为实现动物园概念的类,需要包含有关动物园的各种属性、方法。
具体要求
如下:
(1)基于Animal类创建动物园中所有动物的实例。
(2)实现对动物园中所有动物信息的显示功能。
具体实现如下所示:
```c++
class Zoo
{
public:
Zoo(string name);
~Zoo();
};
```
可以看到,该类中实现了添加动物的方法addAnimal、动物信息的展示方法showInfo、获取动物数量的方法getAnimalCount、获得园区名称的方法getName、运算符重载功能
等。
3. WildZoo和PetZoo类设计
WildZoo和PetZoo这两个类主要继承自Zoo,因此它们继承了Zoo类的所有属性、方法,可以在此基础上扩展自己的特殊功能。
如样例代码所示:
4. 运算符重载设计
为了让两个动物园的动物数量可以进行比较,我们实现了运算符重载方法。
如样例代码所示:
5. 动物类中虚函数和多态
在Animal类中我们定义了一个虚函数sound(),并在Cat和Dog类中重写了这个虚函数。
并且在Zoo类中使用了多态的概念,调用了该虚函数。
如样例代码所示:
```c++
void Animal::sound()
{
cout<<"动物叫声:...."<<endl;
}
cout<<endl;
}
```
四、实验结果与分析
在完成本次实验后,我们可以通过测试代码来验证各种功能的正确性。
如下所示:
PetZoo p1("宠物园1");
PetZoo p2("宠物园2");
w1.addAnimal(new Tiger(5, 200.0f));
w1.addAnimal(new Deer(3, 30.5f));
w1.addAnimal(new Lion(4, 150.0f));
cout<<"野生动物园1和野生动物园2动物数量是否相等:";
if(w1==w2)cout<<"相等"<<endl;
else cout<<"不相等"<<endl;
通过执行以上测试代码,我们可以看到输出结果如下所示:
```
野生动物园1和野生动物园2动物数量是否相等:不相等
宠物园1和宠物园2动物数量是否相等:不相等
宠物园1共有4种动物:
动物叫声:喵喵喵....
动物叫声:喵喵喵....
动物叫声:汪汪汪....
动物叫声:汪汪汪....
野生动物园2共有2种动物:
动物叫声:....
动物叫声:....
```
以上输出结果证明,我们的运算符重载实现正确;动物信息展示、基于虚函数的多态实现正确;WildZoo和PetZoo类能够正确地继承自Zoo类,并传递了其各自的独特属性。
五、总结体会
本次实验中,我们深入学习了C++中的继承和多态的概念及其实现,通过自己编写代码加深了对这些概念的理解。
通过实验,我们掌握了继承、多态(包括虚函数和运算符重载)的实现方式,掌握了如何定义派生类、如何在派生类中重写基类方法、如何调用基类方法等。
对于C++面向对象编程的理解更加深入。
在编写本次实验中,我们着重了解了继承和多态的概念。
继承分为单一继承和多重继承两种模式。
单一继承指的是一个子类只有一个父类,多重继承指的是一个子类同时有多个父类。
在C++中,继承是通过class类名: 访问说明符基类名来实现的。
我们可以看到,在定义派生类时,使用冒号":" 将基类名和派生类名连接在一起。
在实现继承时,我们需要注意:
1. 父类的private成员对外不可见,不能被子类继承和访问。
2. 为了方便使用,可以定义虚函数。
虚函数指向的是在程序运行时确定的函数,可以实现动态分派和多态性。
多态可以分为静态多态和动态多态。
静态多态是指通过重载函数名实现的多态,可以区分参数的类型、个数、顺序等。
动态多态是指通过虚函数实现的多态,可以在运行时根据不同对象的类型调用不同的函数。
为了实现动态多态,我们需要在基类中定义一个虚函数,在派生类中将其重写。
在派生类中使用override关键字显式地表示该函数是重写基类中的虚函数。
并且,在基类中,我们可以使用virtual关键字来定义虚函数。
运算符重载可以通过关键字operator和运算符号实现。
在C++中,我们可以为一个类的对象定义输出、输入、加、减、乘、除等运算符重载,方便类的实际应用。
我们也可以定义自己的比较运算符,如">"、"<"、">="、"<="等。
在本次实验中,我们首先实现了Animal类作为基类,并在Cat和Dog这两个派生类中重写了sound()方法。
然后我们在Zoo类中继承了Animal类中定义的属性和方法,并在此基础上实现了各种动物园的基本属性和方法,并进行了多态的实现。
为了扩展以上功能,我们实现了WildZoo和PetZoo这两个派生类,并重载了"=="运算符比较了两个派生类之间的动物数量,同时还可以对"<"、">"等运算符进行重载,以实现各种功能。
通过以上实验,我们深入了解了C++中的继承、多态和运算符重载的概念及其实现。
这些概念是C++面向对象编程中非常重要的基础,对于我们日后进行复杂程序的开发具有重要的指导意义和应用价值。