C++使用多态的例子
时间: 2024-08-14 09:06:43 浏览: 51
在C++中,多态的一个常见例子是通过虚函数(Virtual Functions)来实现。虚函数是在基类声明的,但在派生类中可以被重写。下面是一个简单的例子:
```cpp
// 定义一个基类 Animal
class Animal {
public:
virtual void speak() { cout << "This is an animal." << endl; }
};
// 派生出两个子类:Dog 和 Cat
class Dog : public Animal {
public:
void speak() override { cout << "Woof!" << endl; }
};
class Cat : public Animal {
public:
void speak() override { cout << "Meow!" << endl; }
};
// 使用 Animal 类型的指针指向不同的子类对象
Animal* animals = {new Dog(), new Cat()};
// 调用 speak() 函数,会根据实际对象类型执行对应的子类方法
for (int i = 0; i < 2; i++) {
animals[i]->speak();
}
```
在这个例子中,`speak()`函数是虚函数,所以当你通过`Animal`类型的指针调用它时,实际上执行的是子类`Dog`或`Cat`的方法。这就是C++中的动态绑定,也称为运行时多态。
相关问题
c++多态学习例子
当然!多态是面向对象编程中的重要概念,它允许不同类型的对象以统一的方式进行处理。下面是一个简单的多态学习例子:
```python
class Animal:
def sound(self):
pass
class Dog(Animal):
def sound(self):
print("汪汪汪!")
class Cat(Animal):
def sound(self):
print("喵喵喵!")
def make_sound(animal):
animal.sound()
dog = Dog()
cat = Cat()
make_sound(dog) # 输出:汪汪汪!
make_sound(cat) # 输出:喵喵喵!
```
在上面的例子中,`Animal` 类是一个基类,它定义了一个 `sound()` 方法。`Dog` 和 `Cat` 类分别继承了 `Animal` 类,并重写了 `sound()` 方法。
`make_sound()` 函数接受一个 `Animal` 类型的参数,并调用它的 `sound()` 方法。当我们传入 `Dog` 或 `Cat` 对象时,由于多态的特性,它们的 `sound()` 方法会被正确地调用。
这个例子展示了多态的使用,通过将不同的对象传递给相同的函数,我们可以以统一的方式处理它们,并根据对象的实际类型调用正确的方法。
那你帮我写一个c++使用多态的例子
当然可以为您提供一个简单的使用多态的C++例子:
```c++
#include <iostream>
using namespace std;
class Shape {
public:
virtual void draw() {
cout << "This is a shape." << endl;
}
};
class Circle : public Shape {
public:
void draw() {
cout << "This is a circle." << endl;
}
};
class Rectangle : public Shape {
public:
void draw() {
cout << "This is a rectangle." << endl;
}
};
int main() {
Shape *s;
Circle c;
Rectangle r;
s = &c;
s->draw();
s = &r;
s->draw();
return 0;
}
```
在这个例子中,我们定义了一个抽象类Shape,它有一个draw函数,但是没有实现任何功能。然后我们定义了两个类,Circle和Rectangle,它们都继承自Shape,并且重写了draw函数,实现了自己的功能。
在主函数中,我们定义了一个Shape类型的指针s,然后将它分别指向了Circle和Rectangle的对象。当我们调用s->draw()时,它会根据对象的实际类型去调用相应的draw函数,这就是多态的实现。
运行结果为:
```
This is a circle.
This is a rectangle.
```
这就是一个简单的使用多态的C++例子。希望对您有所帮助!
阅读全文