当前位置: 首页 > news >正文

网站建设合同通用范本网站地图 格式

网站建设合同通用范本,网站地图 格式,国内4a广告公司有哪些,小清新 wordpress在 C 中,多态性(Polymorphism) 分为 静态多态(Static Polymorphism) 和 动态多态(Dynamic Polymorphism),二者通过不同的机制实现代码的灵活性。以下是详细对比和核心要点&#xff1…

在 C++ 中,多态性(Polymorphism) 分为 静态多态(Static Polymorphism) 和 动态多态(Dynamic Polymorphism),二者通过不同的机制实现代码的灵活性。以下是详细对比和核心要点:

目录

一、静态多态(编译时多态)

定义

实现方式

1.函数重载(Function Overloading)

2.模板(Templates)

3.运算符重载(Operator Overloading)

特点

典型应用

二、动态多态(运行时多态)

定义

实现方式

特点

典型应用

三、核心区别对比表

四、选择策略

使用静态多态的场景

使用动态多态的场景

五、混合使用技术

CRTP(奇异递归模板模式)

类型擦除(Type Erasure)

六、性能对比数据

总结建议


一、静态多态(编译时多态)

定义

在编译期间确定具体调用的函数或操作,不依赖运行时类型信息。

实现方式

1.函数重载(Function Overloading)

void print(int x) { /* 处理整型 */ }
void print(double x) { /* 处理浮点型 */ }

         编译器根据参数类型选择函数。

2.模板(Templates)

template <typename T>
T add(T a, T b) { return a + b; }add(1, 2);    // 实例化为 int 版本
add(1.0, 2.0); // 实例化为 double 版本

         编译时生成具体类型的代码。

3.运算符重载(Operator Overloading)

Vector operator+(const Vector& a, const Vector& b) { return Vector(a.x + b.x, a.y + b.y);
}

特点

  • 优点

    • 零运行时开销(无虚函数调用)

    • 支持泛型编程(如 STL 容器和算法)

  • 缺点

    • 编译时间增加(模板实例化)

    • 错误信息复杂(模板报错难以理解)

典型应用

  • STL 容器(vector<T>map<K,V>

  • 泛型算法(std::sortstd::transform


二、动态多态(运行时多态)

定义

在程序运行期间根据对象类型动态决定调用的函数。

实现方式

  1. 虚函数(Virtual Functions)

    class Shape {
    public:virtual void draw() = 0; // 纯虚函数
    };class Circle : public Shape {
    public:void draw() override { /* 画圆 */ }
    };Shape* shape = new Circle();
    shape->draw(); // 运行时调用 Circle::draw()
  2. 虚表(vtable)机制

    • 每个多态类有一个虚函数表

    • 对象包含指向虚表的指针(vptr)

特点

  • 优点

    • 支持运行时类型识别(RTTI)

    • 代码扩展性强(新增派生类无需修改基类)

  • 缺点

    • 运行时开销(虚表查找,通常多一次指针间接访问)

    • 对象内存增加(vptr 占用空间)

典型应用

  • GUI 框架(不同控件的事件处理)

  • 插件系统(动态加载派生类)


三、核心区别对比表

特征静态多态动态多态
决议时机编译时运行时
实现机制函数重载、模板虚函数、继承
性能无运行时开销虚表查找开销
灵活性依赖编译时已知类型支持运行时类型动态绑定
代码膨胀可能(模板实例化多份代码)无(虚函数共享代码)
错误检测编译时报错可能运行时崩溃(错误转型等)

四、选择策略

使用静态多态的场景

  • 需要高性能(如数值计算、游戏引擎)

  • 类型在编译时已知(如泛型算法)

  • 避免虚函数开销(嵌入式系统开发)

示例

template <typename T>
void fastSort(T* arr, size_t size) { // 模板实现高效排序
}

使用动态多态的场景

  • 需要运行时扩展性(如插件架构)

  • 处理异构对象集合(如 GUI 控件管理)

  • 实现接口抽象(如设计模式中的策略模式)

示例

class PaymentStrategy {
public:virtual void pay(int amount) = 0;
};class CreditCardPayment : public PaymentStrategy {
public:void pay(int amount) override { /* 信用卡支付逻辑 */ }
};// 运行时选择支付方式
PaymentStrategy* strategy = new CreditCardPayment();
strategy->pay(100);

五、混合使用技术

CRTP(奇异递归模板模式)

结合静态多态的高效与动态多态的接口统一性:

template <typename Derived>
class Base {
public:void interface() {static_cast<Derived*>(this)->implementation();}
};class Derived : public Base<Derived> {
public:void implementation() { /* 具体实现 */ }
};

类型擦除(Type Erasure)

使用 std::function 或自定义包装器实现动态行为:

class AnyDrawable {struct Concept {virtual ~Concept() = default;virtual void draw() = 0;};template <typename T>struct Model : Concept {T obj;void draw() override { obj.draw(); }};std::unique_ptr<Concept> ptr;
public:template <typename T>AnyDrawable(T&& obj) : ptr(new Model<std::decay_t<T>>{std::forward<T>(obj)}) {}void draw() { ptr->draw(); }
};// 使用
AnyDrawable shape1 = Circle();
AnyDrawable shape2 = Square();
shape1.draw(); // 动态调用

六、性能对比数据

操作静态多态(模板)动态多态(虚函数)
函数调用延迟1.2 ns3.5 ns
10^6 次调用耗时1.2 ms3.5 ms
内存占用(每个对象)0 额外字节8 字节(vptr)
代码体积增加可能较大(实例化)固定

总结建议

  1. 优先选择静态多态

    • 当性能要求严格且类型已知时

    • 使用模板和重载减少运行时开销

  2. 必须使用动态多态

    • 需要运行时灵活扩展时

    • 处理未知派生类对象集合

  3. 混合方案

    • 对性能敏感模块使用 CRTP

    • 对接口抽象层使用虚函数

理解二者的区别与适用场景,可帮助开发者在效率与灵活性之间找到最佳平衡。

http://www.dtcms.com/a/514063.html

相关文章:

  • 两学一做 山西答题网站广州线下教学
  • 专业公司网站设计企业开个大型购物网站需要多少钱
  • 免费合同模板网站网站开发修改端口
  • 长沙市网站建设公司代理商闵行区网站设计
  • 接做网站需要问什么条件网站开发需求文档
  • 临沂网站制作报价网站优化做些什么
  • 邢台网站建设信息聊城专业网站建设公司哪家好
  • 购物网站seo搜索引擎前期分析贵阳网站建设公司哪个好
  • 有什么网站可以做设计兼职的个人主页图
  • 地铁建设网站建设部网站 造价
  • php做网站难么网站建设公司对父亲节宣传口号
  • 马来西亚网站建设西安市城乡建设管理局网站6
  • 不备案的网站可以做竞价吗自己网上开店怎么做
  • 网站建设费记到什么科目服装微信商城网站建设
  • 青岛网站域名备案九龙坡集团网站建设
  • 怎么做淘宝网站赚钱吗自己做的网站能在线支付
  • 专门做网上链接推广的网站ui设计学什么
  • 企业网站功效网站创造
  • 大业推广网站制作h5免费平台
  • 无锡外贸网站制作wordpress评论首页显示第一
  • 温州正规制作网站公司互动网站的核心技术
  • 用php做网站的开发工具电商 网站开发 哪个好
  • 怎做网站手机营销型网站方案ppt
  • 国内网站建设最好公司巩义做网站汉狮公司
  • 娄底网站建设是什么网站建设技术员工资
  • 新手网站设计定价wordpress的seo优化
  • 如何自己做软件网站河北建设网站公司
  • 赣州网站建设策划个人注册公司在哪个网站申请
  • 前端做网站需要学什么东莞网络公司哪家最好
  • 仿照一个国外的网站要多少钱wordpress网站打开很卡