基类定义如下: class animal { public: virtual void voice()=0; }; 定义猫和狗两个继承类,然后在向量容器中放入动态生成的一只猫对象和一只狗对象(基于多态方式,即把基类指针存入向量容器); 而后通过迭代器访问容器内对象并调用对应函数,不能有内存泄露。
时间: 2024-03-21 17:40:45 浏览: 43
数据类型的基类
好的,这是一个关于多态的问题,我来给你解答。
首先,让我们定义猫和狗两个继承类:
```c++
class Cat : public animal {
public:
void voice() override {
std::cout << "Meow!" << std::endl;
}
};
class Dog : public animal {
public:
void voice() override {
std::cout << "Woof!" << std::endl;
}
};
```
接着,我们可以声明一个向量容器,并把动态生成的一只猫对象和一只狗对象(基于多态方式,即把基类指针存入向量容器)放入容器中:
```c++
std::vector<animal*> animals;
animals.push_back(new Cat());
animals.push_back(new Dog());
```
然后,我们可以通过迭代器访问容器内对象并调用对应函数:
```c++
std::vector<animal*>::iterator it;
for (it = animals.begin(); it != animals.end(); it++) {
(*it)->voice();
}
```
最后,我们需要释放动态分配的内存,避免内存泄露:
```c++
for (it = animals.begin(); it != animals.end(); it++) {
delete *it;
}
```
完整代码如下:
```c++
#include <iostream>
#include <vector>
class animal {
public:
virtual void voice() = 0;
};
class Cat : public animal {
public:
void voice() override {
std::cout << "Meow!" << std::endl;
}
};
class Dog : public animal {
public:
void voice() override {
std::cout << "Woof!" << std::endl;
}
};
int main() {
std::vector<animal*> animals;
animals.push_back(new Cat());
animals.push_back(new Dog());
std::vector<animal*>::iterator it;
for (it = animals.begin(); it != animals.end(); it++) {
(*it)->voice();
}
for (it = animals.begin(); it != animals.end(); it++) {
delete *it;
}
return 0;
}
```
希望我的回答对你有帮助!
阅读全文