0

0

c++中如何实现多态_c++多态实现方法

裘德小鎮的故事

裘德小鎮的故事

发布时间:2025-09-27 20:25:01

|

1014人浏览过

|

来源于php中文网

原创

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

c++中如何实现多态_c++多态实现方法

在C++中,多态是面向对象编程的核心特性之一,它允许同一接口调用不同对象的特定实现。多态主要通过虚函数继承机制来实现,分为编译时多态和运行时多态。

运行时多态(动态多态)

运行时多态是C++中最常见的多态形式,依赖于基类指针或引用调用虚函数,在程序运行时确定具体调用哪个派生类的函数。

实现步骤:

  • 在基类中声明虚函数(使用 virtual 关键字)
  • 派生类重写(override)该虚函数
  • 通过基类指针或引用指向派生类对象并调用函数

示例代码:

立即学习C++免费学习笔记(深入)”;

#include 
using namespace std;

class Animal { public: virtual void speak() { cout << "Animal speaks" << endl; } };

class Dog : public Animal { public: void speak() override { cout << "Dog barks" << endl; } };

class Cat : public Animal { public: void speak() override { cout << "Cat meows" << endl; } };

int main() { Animal a1 = new Dog(); Animal a2 = new Cat();

a1-youjiankuohaophpcnspeak(); // 输出: Dog barks
a2-youjiankuohaophpcnspeak(); // 输出: Cat meows

delete a1;
delete a2;
return 0;

}

在这个例子中,speak() 是虚函数,调用哪个版本由实际对象类型决定,而不是指针类型。

纯虚函数与抽象基类

如果希望基类中的函数没有默认实现,强制派生类提供自己的实现,可以使用纯虚函数

语法:
virtual 返回类型 函数名() = 0;

mallcloud商城
mallcloud商城

mallcloud商城基于SpringBoot2.x、SpringCloud和SpringCloudAlibaba并采用前后端分离vue的企业级微服务敏捷开发系统架构。并引入组件化的思想实现高内聚低耦合,项目代码简洁注释丰富上手容易,适合学习和企业中使用。真正实现了基于RBAC、jwt和oauth2的无状态统一权限认证的解决方案,面向互联网设计同时适合B端和C端用户,支持CI/CD多环境部署,并提

下载

包含纯虚函数的类称为抽象类,不能实例化。

示例:

class Shape {
public:
    virtual double area() = 0; // 纯虚函数
};

class Circle : public Shape { double radius; public: Circle(double r) : radius(r) {} double area() override { return 3.14159 radius radius; } };

编译时多态(静态多态)

编译时多态主要通过函数重载模板实现,调用哪个函数在编译阶段就已确定。

函数重载示例:

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
T max(T a, T b) {
    return (a > b) ? a & b;
}

模板在编译时为每种类型生成对应的函数版本,属于静态多态。

基本上就这些。运行时多态靠虚函数表和指针实现,灵活但有轻微性能开销;编译时多态效率高,但需要类型在编译期明确。根据需求选择合适方式即可。

相关专题

更多
python中print函数的用法
python中print函数的用法

python中print函数的语法是“print(value1, value2, ..., sep=' ', end=' ', file=sys.stdout, flush=False)”。本专题为大家提供print相关的文章、下载、课程内容,供大家免费下载体验。

186

2023.09.27

go语言 面向对象
go语言 面向对象

本专题整合了go语言面向对象相关内容,阅读专题下面的文章了解更多详细内容。

56

2025.09.05

java面向对象
java面向对象

本专题整合了java面向对象相关内容,阅读专题下面的文章了解更多详细内容。

50

2025.11.27

java多态详细介绍
java多态详细介绍

本专题整合了java多态相关内容,阅读专题下面的文章了解更多详细内容。

15

2025.11.27

硬盘接口类型介绍
硬盘接口类型介绍

硬盘接口类型有IDE、SATA、SCSI、Fibre Channel、USB、eSATA、mSATA、PCIe等等。详细介绍:1、IDE接口是一种并行接口,主要用于连接硬盘和光驱等设备,它主要有两种类型:ATA和ATAPI,IDE接口已经逐渐被SATA接口;2、SATA接口是一种串行接口,相较于IDE接口,它具有更高的传输速度、更低的功耗和更小的体积;3、SCSI接口等等。

1072

2023.10.19

PHP接口编写教程
PHP接口编写教程

本专题整合了PHP接口编写教程,阅读专题下面的文章了解更多详细内容。

127

2025.10.17

php8.4实现接口限流的教程
php8.4实现接口限流的教程

PHP8.4本身不内置限流功能,需借助Redis(令牌桶)或Swoole(漏桶)实现;文件锁因I/O瓶颈、无跨机共享、秒级精度等缺陷不适用高并发场景。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。

841

2025.12.29

java接口相关教程
java接口相关教程

本专题整合了java接口相关内容,阅读专题下面的文章了解更多详细内容。

13

2026.01.19

c++ 根号
c++ 根号

本专题整合了c++根号相关教程,阅读专题下面的文章了解更多详细内容。

25

2026.01.23

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
10分钟--Midjourney创作自己的漫画
10分钟--Midjourney创作自己的漫画

共1课时 | 0.1万人学习

Midjourney 关键词系列整合
Midjourney 关键词系列整合

共13课时 | 0.9万人学习

AI绘画教程
AI绘画教程

共2课时 | 0.2万人学习

关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号