如何使用虚函数实现多态性
时间: 2023-06-25 22:04:37 浏览: 64
在 C++ 中,可以使用虚函数来实现多态性。所谓多态性,就是同一个函数名可以有多种不同的实现方式,这些实现方式可以根据不同的对象类型进行调用。
具体实现步骤如下:
1. 在基类中定义虚函数,使用 virtual 关键字修饰。例如:
```
class Animal {
public:
virtual void speak() {
std::cout << "I am an animal" << std::endl;
}
};
```
2. 在派生类中重写基类的虚函数,使用 override 关键字修饰。例如:
```
class Cat : public Animal {
public:
void speak() override {
std::cout << "I am a cat" << std::endl;
}
};
```
3. 创建基类指针,并让它指向派生类对象。例如:
```
Animal* animal = new Cat();
```
4. 调用虚函数,会根据指针所指向的对象类型来调用相应的实现。例如:
```
animal->speak(); // 输出 "I am a cat"
```
这样就实现了多态性。通过虚函数,我们可以在基类中定义一些通用的行为,而在派生类中根据具体需求进行重写,从而实现不同的行为。
相关问题
c++如何使用虚函数实现多态性
在C++中,使用虚函数实现多态性需要遵循以下步骤:
1. 定义一个基类,并在其中声明一个虚函数。例如:
```
class Shape {
public:
virtual void draw() {}
};
```
2. 定义一个或多个派生类,并覆盖基类的虚函数。例如:
```
class Circle : public Shape {
public:
void draw() override {}
};
class Square : public Shape {
public:
void draw() override {}
};
```
3. 在主程序中创建基类指针,并使用派生类的对象进行初始化。例如:
```
Shape* pShape = new Circle();
```
4. 调用基类的虚函数,实际上会调用派生类的虚函数。例如:
```
pShape->draw();
```
这样就实现了多态性。在运行时,程序会根据对象的实际类型来调用相应的虚函数,而不是根据指针类型来进行静态绑定。
如何使用虚函数实现多态性?
使用虚函数实现多态性需要满足以下条件:
1. 父类中声明虚函数。
2. 子类中重写虚函数。
3. 通过父类指针或引用调用虚函数。
具体实现方式如下:
1. 在父类中声明虚函数。
```c++
class Animal {
public:
virtual void makeSound() {
cout << "Animal makes sound." << endl;
}
};
```
2. 在子类中重写虚函数。
```c++
class Cat : public Animal {
public:
void makeSound() {
cout << "Meow!" << endl;
}
};
class Dog : public Animal {
public:
void makeSound() {
cout << "Woof!" << endl;
}
};
```
3. 通过父类指针或引用调用虚函数。
```c++
int main() {
Animal* animal1 = new Cat();
animal1->makeSound(); // 输出 "Meow!"
Animal* animal2 = new Dog();
animal2->makeSound(); // 输出 "Woof!"
delete animal1;
delete animal2;
return 0;
}
```
在上述代码中,父类 Animal 声明了虚函数 makeSound(),子类 Cat 和 Dog 分别重写了这个函数。在主函数中,通过父类指针 animal1 和 animal2 分别指向子类 Cat 和 Dog 的对象,并调用它们的 makeSound() 函数。由于 makeSound() 是虚函数,所以会根据对象的实际类型进行动态绑定,最终输出正确的结果。这就是多态性的实现方式之一。