创建Animal(动物):Pig,Cat,Dog 等等这样一个的继承结构。在基类中,提供对所有的Animal都通用的方法,在导出类中,根据特定的类型覆盖这些方法,以便他们执行不同的行为。创建一个Animal数组,填充不同的Animal类型,然后调用基类方法,解释发生的情况。
时间: 2024-03-10 17:43:38 浏览: 89
好的,这是一个关于继承和多态的问题。下面是我对这个问题的解答:
首先,我们可以定义一个名为Animal的基类,其中包含一些通用方法,例如eat()和sleep()等方法。然后我们可以定义一些导出类,如Pig、Cat、Dog等,它们都继承自Animal类,并且可以覆盖基类中的方法,以实现不同的行为。例如,Pig类可以定义一个名为rollInMud()的方法,而Cat类可以定义一个名为climbTree()的方法。
下面是一个简单的示例代码:
```
class Animal {
public:
virtual void eat() {
cout << "Animal is eating." << endl;
}
virtual void sleep() {
cout << "Animal is sleeping." << endl;
}
};
class Pig : public Animal {
public:
virtual void eat() {
cout << "Pig is eating." << endl;
}
void rollInMud() {
cout << "Pig is rolling in mud." << endl;
}
};
class Cat : public Animal {
public:
virtual void eat() {
cout << "Cat is eating." << endl;
}
void climbTree() {
cout << "Cat is climbing a tree." << endl;
}
};
class Dog : public Animal {
public:
virtual void eat() {
cout << "Dog is eating." << endl;
}
void bark() {
cout << "Dog is barking." << endl;
}
};
```
在这个例子中,我们定义了Animal类作为基类,同时定义了Pig、Cat和Dog作为导出类。其中,Pig类覆盖了基类中的eat()方法,并定义了一个名为rollInMud()的方法,而Cat类覆盖了基类中的eat()方法,并定义了一个名为climbTree()的方法。同样,Dog类也覆盖了基类中的eat()方法,并定义了一个名为bark()的方法。
接下来,我们可以创建一个Animal类型的数组,将其中的元素初始化为不同的导出类对象,然后调用基类的eat()方法,观察不同类型对象的行为。例如:
```
int main() {
Animal* animals[3];
animals[0] = new Pig();
animals[1] = new Cat();
animals[2] = new Dog();
for(int i = 0; i < 3; i++) {
animals[i]->eat();
}
return 0;
}
```
在这个主函数中,我们创建了一个包含3个元素的Animal类型数组,分别初始化为Pig、Cat和Dog对象。然后,我们循环遍历这个数组,并调用每个元素的eat()方法。由于每个导出类都覆盖了基类中的eat()方法,因此调用不同类型对象的eat()方法时,会显示不同的输出。例如,调用Pig对象的eat()方法时,会显示“Pig is eating.”,而调用Cat对象的eat()方法时,会显示“Cat is eating.”。
总之,继承和多态是面向对象编程中非常重要的概念,可以帮助我们实现高效、灵活和可扩展的代码。
阅读全文