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

重庆专业网站推广方案网页制作过程及步骤

重庆专业网站推广方案,网页制作过程及步骤,网络广告电话,自己做网站难么在C编程中#xff0c;纯虚类#xff08;也被称为抽象类#xff09;通常用于定义接口#xff0c;而普通类则包含具体的实现。然而#xff0c;在某些情况下#xff0c;将纯虚类转换为普通类并提供默认实现#xff0c;可以显著提升应用程序二进制接口#xff08;ABI#…在C编程中纯虚类也被称为抽象类通常用于定义接口而普通类则包含具体的实现。然而在某些情况下将纯虚类转换为普通类并提供默认实现可以显著提升应用程序二进制接口ABI的兼容性。本文将深入探讨这一策略解释其背后的理论依据对比纯虚类与普通类的优缺点并展示相应的应用场景和代码示例。 一、理论依据 在C中每个包含虚函数的类都有一个与之关联的虚函数表vtable。这个表包含了指向该类所有虚函数的指针。当类被继承时派生类的vtable会继承基类的vtable并添加自己的虚函数。如果基类中的虚函数签名发生变化例如添加新的纯虚函数那么派生类的vtable也会相应地改变这可能导致二进制不兼容。 通过为纯虚函数提供默认实现我们实际上是在基类中定义了一个具体的函数体。这样即使我们在基类中添加了新的虚函数或改变了现有虚函数的行为只要这些变化不影响到已经发布的二进制版本就不会影响派生类的vtable布局。因此这种方法有助于保持旧版本库与新版本库之间的二进制兼容性。 提高二进制兼容性和减少编译依赖方面同样可参考 设计模式-PIMPL 模式 二、纯虚类 vs 普通类优缺点对比 1. 纯虚类抽象类 优点 强制实现确保所有派生类都必须提供特定功能的实现。明确接口清晰地表达了这是一个接口不允许实例化。 缺点 ABI 不兼容任何对虚函数的更改都会导致派生类的vtable变化可能引起二进制不兼容。无默认行为不能为接口提供默认实现除非将其变为非纯虚函数。 2. 普通类 优点 默认实现可以为接口提供默认实现便于维护和扩展。ABI 兼容性通过提供默认实现减少了vtable变化的可能性提高了二进制兼容性。 缺点 可能允许实例化如果不小心可能会实例化这个类尽管它本来应该作为接口使用可以通过将构造函数设为protected或private来避免。接口不够明确不如纯虚类那样直观地表达这是一个接口可以通过命名约定和文档来弥补。 三、应用场景 长期维护的库对于需要长期维护并可能有多个版本同时使用的库来说提供默认实现可以减少更新带来的风险保护现有的二进制接口。框架和插件系统在框架或插件系统中提供默认实现可以让开发者更容易地扩展系统同时保持系统的稳定性和一致性。跨平台开发在不同平台上编译和链接代码时确保二进制兼容性是非常重要的尤其是在使用静态库的时候。 四、代码示例 以下是一个简单的代码示例展示了如何将纯虚类转换为包含默认实现的普通类。 // 纯虚类接口定义 class IShape { public:virtual ~IShape() default;virtual double area() const 0; // 纯虚函数virtual double perimeter() const 0; // 纯虚函数 };// 具体实现类圆形 class Circle : public IShape { public:Circle(double radius) : radius_(radius) {}double area() const override { return 3.141592653589793 * radius_ * radius_; }double perimeter() const override { return 2 * 3.141592653589793 * radius_; } private:double radius_; };// 转换为包含默认实现的普通类 class Shape { public:virtual ~Shape() default;virtual double area() const { return 0.0; } // 默认实现virtual double perimeter() const { return 0.0; } // 默认实现 };// 具体实现类矩形继承自普通类 class Rectangle : public Shape { public:Rectangle(double width, double height) : width_(width), height_(height) {}double area() const override { return width_ * height_; }double perimeter() const override { return 2 * (width_ height_); } private:double width_;double height_; };在这个例子中IShape是一个纯虚类接口定义了area和perimeter两个纯虚函数。Circle类实现了这个接口。然后我们将IShape转换为一个包含默认实现的普通类Shape并添加了一个具体实现类Rectangle。在Shape类中area和perimeter函数有默认实现这意味着任何继承自Shape的类都可以选择性地覆盖这些函数。 五、注意事项 虽然这种方法有助于提高ABI兼容性但它并不能完全消除所有可能的二进制不兼容问题。例如如果修改了类的数据成员或改变了非虚函数的行为仍然可能会导致二进制不兼容。因此在设计库时应当综合考虑各种因素以确保最佳的兼容性和稳定性。
http://www.tj-hxxt.cn/news/221186.html

相关文章:

  • 一个网站怎么推广宿迁手机网站建设公司
  • 企业网站升级app科技产品网站建设
  • 专业北京网站建设公司排名湛江网站制作江网站制作
  • 化妆品企业网站建设的策划方案wordpress 比较
  • 网站做好第二年要多少钱国内哪个网站是做电子元器件的
  • 湖南做网站哪家好服装设计手绘
  • 做网站需注意事项医院 网站建设 新闻
  • 网站建设商业眉山建设中等职业技术学校 网站
  • 怎么建设网站挣钱河源北京网站建设
  • 开封做网站睿艺美建设行业证书全国联网查询
  • 如何将html发布到网站网站经营性备案需要什么资料
  • 冷饮网站开发背景意义秦皇岛城乡建设局
  • 宜昌网站开发网站建设服务合约
  • 永久免费网站虚拟主机wordpress用户头像插件
  • 公益网站建设郑州开发小程序平台
  • 服务器iis做网站杭州网站开发后端招
  • 汽车专业网站网站建设费用包括哪些
  • 请问婚庆网站建设该怎么做呢做选择的网站首页
  • 花生壳怎么建设购物网站教育网站制作公司
  • 网站开发简述100个最好的微信小程序
  • 襄阳谷城网站建设免费seo软件推荐
  • 淘宝内部卷怎么做网站商务邮箱注册
  • 做试卷的网站编程一小时网站
  • 西安外贸网站建设wordpress邮件发送类
  • 自己如何制作一个网页seo软件开发
  • 自己做网站需要多少资金wordpress菜单手机显示下拉
  • 怎么看网站用什么平台做的网页设计项目模板代码
  • 消防网站建设的风格项目立项流程
  • 网站建设公司排行百度怎样做网站
  • 访问自己做的网站中石化工建设宁波分公司网站