多态是C++三大特性之一,通过虚函数实现运行时多态,允许基类指针调用派生类重写函数,实现“一种接口,多种实现”,提升程序灵活性与可扩展性。

多态是C++面向对象编程的三大核心特性之一(封装、继承、多态),它允许不同类的对象对同一消息作出不同的响应。简单说,就是“一种接口,多种实现”。C++中的多态主要通过虚函数和继承机制来实现,分为编译时多态(如函数重载)和运行时多态(最常见的是基于虚函数的动态绑定)。
运行时多态是C++中最典型的多态形式,依赖于基类指针或引用调用虚函数时,实际执行哪个函数由对象的真实类型在运行时决定。
实现步骤:
示例代码:
立即学习“C++免费学习笔记(深入)”;
#include <iostream>
using namespace std;
<p>class Animal {
public:
virtual void speak() {
cout << "Animal makes a sound" << endl;
}
};</p><p>class Dog : public Animal {
public:
void speak() override {
cout << "Dog barks: Woof!" << endl;
}
};</p><p>class Cat : public Animal {
public:
void speak() override {
cout << "Cat meows: Meow!" << endl;
}
};</p><p>int main() {
Animal<em> animal1 = new Dog();
Animal</em> animal2 = new Cat();</p><pre class='brush:php;toolbar:false;'>animal1->speak(); // 输出: Dog barks: Woof!
animal2->speak(); // 输出: Cat meows: Meow!
delete animal1;
delete animal2;
return 0;}
在这个例子中,虽然指针类型是Animal*,但调用speak()时会根据实际对象类型执行对应的版本,这就是动态多态的体现。
有时候我们希望基类中的某个函数没有具体实现,只作为接口规范,这时可以使用纯虚函数。包含纯虚函数的类称为抽象类,不能实例化。
语法:virtual 返回类型 函数名() = 0;
示例:
class Shape {
public:
virtual double area() const = 0; // 纯虚函数
virtual ~Shape() {} // 虚析构函数建议加上
};
<p>class Circle : public Shape {
private:
double radius;
public:
Circle(double r) : radius(r) {}
double area() const override {
return 3.14159 <em> radius </em> radius;
}
};</p><p>class Rectangle : public Shape {
private:
double width, height;
public:
Rectangle(double w, double h) : width(w), height(h) {}
double area() const override {
return width * height;
}
};</p>这样可以统一处理各种图形:
void printArea(const Shape& s) {
cout << "Area: " << s.area() << endl;
}
<p>int main() {
Circle c(5);
Rectangle r(4, 6);</p><pre class='brush:php;toolbar:false;'>printArea(c); // 输出圆的面积
printArea(r); // 输出矩形的面积
return 0;}
多态在实际开发中非常有用,特别是在设计可扩展系统时。
virtual,防止派生类资源未释放override关键字明确表示重写,提高代码可读性和安全性基本上就这些。C++的多态机制让程序更灵活、易于维护和扩展,掌握好虚函数、抽象类和动态绑定是写出高质量面向对象代码的关键。
以上就是c++++中什么是多态_c++多态机制与应用示例的详细内容,更多请关注php中文网其它相关文章!
c++怎么学习?c++怎么入门?c++在哪学?c++怎么学才快?不用担心,这里为大家提供了c++速学教程(入门到精通),有需要的小伙伴保存下载就能学习啦!
Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号