C++中多态分为运行时和编译时两种,运行时多态通过虚函数和继承实现,由基类指针或引用在运行时调用派生类重写函数,如Animal基类的speak()被Dog和Cat类重写,通过new创建对象并调用对应版本;纯虚函数用于定义抽象基类,强制派生类实现特定接口,如Shape类的area();编译时多态通过函数重载和模板实现,函数调用在编译期确定,如print函数重载不同类型,模板函数max为不同类型生成独立实例,静态多态效率高但需类型明确,动态多态灵活但有虚函数表开销,应根据需求选择。

在C++中,多态是面向对象编程的核心特性之一,它允许同一接口调用不同对象的特定实现。多态主要通过虚函数和继承机制来实现,分为编译时多态和运行时多态。
运行时多态是C++中最常见的多态形式,依赖于基类指针或引用调用虚函数,在程序运行时确定具体调用哪个派生类的函数。
实现步骤:
示例代码:
立即学习“C++免费学习笔记(深入)”;
#include <iostream>
using namespace std;
<p>class Animal {
public:
virtual void speak() {
cout << "Animal speaks" << endl;
}
};</p><p>class Dog : public Animal {
public:
void speak() override {
cout << "Dog barks" << endl;
}
};</p><p>class Cat : public Animal {
public:
void speak() override {
cout << "Cat meows" << endl;
}
};</p><p>int main() {
Animal<em> a1 = new Dog();
Animal</em> a2 = new Cat();</p><pre class='brush:php;toolbar:false;'>a1->speak(); // 输出: Dog barks
a2->speak(); // 输出: Cat meows
delete a1;
delete a2;
return 0;}
在这个例子中,speak() 是虚函数,调用哪个版本由实际对象类型决定,而不是指针类型。
如果希望基类中的函数没有默认实现,强制派生类提供自己的实现,可以使用纯虚函数。
语法:virtual 返回类型 函数名() = 0;
包含纯虚函数的类称为抽象类,不能实例化。
示例:
class Shape {
public:
virtual double area() = 0; // 纯虚函数
};
<p>class Circle : public Shape {
double radius;
public:
Circle(double r) : radius(r) {}
double area() override {
return 3.14159 <em> radius </em> radius;
}
};</p>编译时多态主要通过函数重载和模板实现,调用哪个函数在编译阶段就已确定。
函数重载示例:
void print(int x) { cout << "Integer: " << x << endl; }
void print(double x) { cout << "Double: " << x << endl; }
void print(string x) { cout << "String: " << x << endl; }
模板实现泛型多态:
template<typename T>
T max(T a, T b) {
return (a > b) ? a & b;
}
模板在编译时为每种类型生成对应的函数版本,属于静态多态。
基本上就这些。运行时多态靠虚函数表和指针实现,灵活但有轻微性能开销;编译时多态效率高,但需要类型在编译期明确。根据需求选择合适方式即可。
以上就是c++++中如何实现多态_c++多态实现方法的详细内容,更多请关注php中文网其它相关文章!
c++怎么学习?c++怎么入门?c++在哪学?c++怎么学才快?不用担心,这里为大家提供了c++速学教程(入门到精通),有需要的小伙伴保存下载就能学习啦!
Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号