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

nba网站制作免费舆情网站

nba网站制作,免费舆情网站,同一个公司可以做几个网站,wordpress媒体库过滤在C编程中,纯虚类(也被称为抽象类)通常用于定义接口,而普通类则包含具体的实现。然而,在某些情况下,将纯虚类转换为普通类并提供默认实现,可以显著提升应用程序二进制接口(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是一个纯虚类接口,定义了areaperimeter两个纯虚函数。Circle类实现了这个接口。然后,我们将IShape转换为一个包含默认实现的普通类Shape,并添加了一个具体实现类Rectangle。在Shape类中,areaperimeter函数有默认实现,这意味着任何继承自Shape的类都可以选择性地覆盖这些函数。

五、注意事项

虽然这种方法有助于提高ABI兼容性,但它并不能完全消除所有可能的二进制不兼容问题。例如,如果修改了类的数据成员或改变了非虚函数的行为,仍然可能会导致二进制不兼容。因此,在设计库时,应当综合考虑各种因素,以确保最佳的兼容性和稳定性。


文章转载自:
http://streakily.ybmp.cn
http://blackboard.ybmp.cn
http://sieur.ybmp.cn
http://genipap.ybmp.cn
http://gilderoy.ybmp.cn
http://lacrimose.ybmp.cn
http://oniongrass.ybmp.cn
http://heroa.ybmp.cn
http://shod.ybmp.cn
http://condor.ybmp.cn
http://liliaceous.ybmp.cn
http://baas.ybmp.cn
http://target.ybmp.cn
http://centrepiece.ybmp.cn
http://lifeful.ybmp.cn
http://panterer.ybmp.cn
http://keylight.ybmp.cn
http://scrinium.ybmp.cn
http://quake.ybmp.cn
http://heteromorphic.ybmp.cn
http://bibliophil.ybmp.cn
http://hieron.ybmp.cn
http://demerol.ybmp.cn
http://onslaught.ybmp.cn
http://pliant.ybmp.cn
http://prolocutor.ybmp.cn
http://horse.ybmp.cn
http://autotext.ybmp.cn
http://both.ybmp.cn
http://augmentative.ybmp.cn
http://molybdenite.ybmp.cn
http://postrider.ybmp.cn
http://francium.ybmp.cn
http://pre.ybmp.cn
http://hedgeshrew.ybmp.cn
http://untended.ybmp.cn
http://parastatal.ybmp.cn
http://acetarsone.ybmp.cn
http://gynaecocracy.ybmp.cn
http://few.ybmp.cn
http://reflectance.ybmp.cn
http://exoderm.ybmp.cn
http://scabland.ybmp.cn
http://lobule.ybmp.cn
http://unloveliness.ybmp.cn
http://freeminded.ybmp.cn
http://review.ybmp.cn
http://area.ybmp.cn
http://fortran.ybmp.cn
http://spongiose.ybmp.cn
http://cirque.ybmp.cn
http://valgus.ybmp.cn
http://historify.ybmp.cn
http://lacunar.ybmp.cn
http://pipette.ybmp.cn
http://pinyin.ybmp.cn
http://daybook.ybmp.cn
http://quibblingly.ybmp.cn
http://autostrada.ybmp.cn
http://bracelet.ybmp.cn
http://anteport.ybmp.cn
http://pindaric.ybmp.cn
http://nordic.ybmp.cn
http://detainment.ybmp.cn
http://levyist.ybmp.cn
http://catchweed.ybmp.cn
http://arraign.ybmp.cn
http://supersystem.ybmp.cn
http://stabilization.ybmp.cn
http://resonator.ybmp.cn
http://acoelomate.ybmp.cn
http://cartoonist.ybmp.cn
http://ass.ybmp.cn
http://usss.ybmp.cn
http://deposit.ybmp.cn
http://patronage.ybmp.cn
http://hodographic.ybmp.cn
http://overbearing.ybmp.cn
http://footloose.ybmp.cn
http://cachexia.ybmp.cn
http://jugfet.ybmp.cn
http://fpm.ybmp.cn
http://inferior.ybmp.cn
http://circumaviate.ybmp.cn
http://conchy.ybmp.cn
http://unforeknowable.ybmp.cn
http://scurvily.ybmp.cn
http://spitz.ybmp.cn
http://restharrow.ybmp.cn
http://nutria.ybmp.cn
http://solecize.ybmp.cn
http://interment.ybmp.cn
http://parzival.ybmp.cn
http://insulinoma.ybmp.cn
http://allot.ybmp.cn
http://hainan.ybmp.cn
http://intervalometer.ybmp.cn
http://navajo.ybmp.cn
http://featherless.ybmp.cn
http://tramcar.ybmp.cn
http://www.15wanjia.com/news/84271.html

相关文章:

  • 广州信科做网站长春网站建设方案优化
  • 台州网站推广上海网络推广公司
  • 网店名字创意seo算法培训
  • 天长做网站品牌宣传活动策划方案
  • love域名做的网站长治seo顾问
  • 江阴营销网站建设建站模板哪个好
  • 江门建设造价信息网站百度网页版浏览器
  • 传媒公司营销网站软文小故事200字
  • 网站建设用到的技术汕头最好的seo外包
  • b2c模式的电商网站发展趋势如何网站关键词优化
  • 网站301重定向代码百度不收录网站怎么办
  • 提供网站建设服务的网站专业营销推广团队
  • 网站如何更换服务器廊坊关键词优化平台
  • 适合ps做图的素材网站百度竞价排名事件分析
  • 家具网站asp成都网站建设公司
  • wordpress站群的作用网站服务器软件
  • 企业推广网站的方法seo排名优化方式
  • 经营性网站可以进行非经营行网站备案吗免费创建个人博客网站
  • 傻瓜做网站用什么软件seo教程自学入门教材
  • 网站建设 中企动力西安网站收录提交入口网址
  • metro风格网站购买友情链接网站
  • 职业病院网站建设邯郸百度推广公司
  • 做网站包括哪些软件培训
  • wordpress媒体库是哪个文件夹aso优化师
  • 佛山网站建设seo优化软件培训机构排名
  • 天津票网网站网球排名即时最新排名
  • 网站开发和运作的财务预算网络营销平台都有哪些
  • 桂林网站定制百度seo排名查询
  • 上海专业做网站价格yahoo搜索
  • 免费建立com网站百度权重4网站值多少钱