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

网站 空间 域名个人适合做什么网站

网站 空间 域名,个人适合做什么网站,wordpress 插件管理,网站根目录文件文章目录 一、多态1、概念2、多态实现方式3、动态绑定与静态绑定4、虚函数4.1、声明与定义4.2、虚函数的工作原理4.3、虚函数的优点与注意事项 5、不能声明为虚函数的函数6、纯虚函数7、抽象类8、总结 前言#xff1a; 在C编程语言中#xff0c;多态性#xff08;Polymorphi… 文章目录 一、多态1、概念2、多态实现方式3、动态绑定与静态绑定4、虚函数4.1、声明与定义4.2、虚函数的工作原理4.3、虚函数的优点与注意事项 5、不能声明为虚函数的函数6、纯虚函数7、抽象类8、总结 前言 在C编程语言中多态性Polymorphism是一项至关重要的特性它赋予了程序高度的灵活性和可扩展性。多态性允许我们通过一个统一的接口来访问不同类型的对象从而实现“一个接口多种实现”的设计理念。 一、多态 1、概念 多态性顾名思义指的是“多种形态”或“多种表现”。在C中多态性允许我们根据对象的实际类型来调用相应的函数而不仅仅是根据对象的声明类型。这种机制使得我们可以在不修改现有代码的情况下轻松扩展程序的功能。 2、多态实现方式 C主要通过继承和虚函数来实现多态性。 继承 继承是面向对象编程中的核心概念之一它允许我们创建新的类派生类来继承现有类基类的属性和方法。通过继承我们可以构建出具有层次结构的类体系为多态性的实现提供了基础。虚函数 虚函数是C中实现多态性的关键。在基类中可以将某些成员函数声明为虚函数这意味着这些函数可以在派生类中被重写Override。当通过基类指针或引用来调用虚函数时C会根据对象的实际类型来调用相应的派生类中的实现这就是所谓的动态绑定Dynamic Binding。 3、动态绑定与静态绑定 虚函数与非虚函数在函数调用时的主要区别在于联编方式的不同。联编是指将源代码中的函数调用解释为执行特定的函数代码块。 静态联编 对于非虚函数编译器在编译过程中进行联编即在编译阶段就确定了要调用的函数具体是哪个类中的实现。静态联编效率更高因此被设置为C的默认选择。动态联编 对于虚函数编译器生成能够在程序运行时选择正确虚方法的代码。当通过基类指针或引用调用虚函数时编译器会根据对象的实际类型初始化虚函数表指针使之指向所属类的虚函数表从而找到正确的函数进行调用。 4、虚函数 虚函数是实现多态的重要机制下面重点介绍下虚函数的实现原理 4.1、声明与定义 要在C中声明一个虚函数只需在函数声明前加上virtual关键字即可。例如 class Base { public:virtual void func() {cout Function of Base class endl;} };class Derived : public Base { public:void func() override { // 使用override关键字确保正确覆盖cout Function of Derived class endl;} };4.2、虚函数的工作原理 虚函数的实现依赖于C编译器和运行时系统的支持。具体来说虚函数的实现涉及以下几个关键步骤 虚函数表VTable 每个包含虚函数的类都有一个虚函数表它是一个函数指针的数组指向该类及其派生类中所有虚函数的实现。虚函数表在类的定义时就已经被创建并在对象创建时与对象关联。虚指针VPtr 在包含虚函数的类的对象中通常会有一个指向虚函数表的指针称为虚指针。虚指针在对象构造时被设置指向相应类的虚函数表。动态绑定 当通过基类的指针或引用调用虚函数时C运行时系统会首先检查对象的虚指针然后根据虚指针找到对应的虚函数表。接着根据调用的虚函数在虚函数表中的位置找到实际的函数指针并调用之。这个过程称为动态绑定因为它是在运行时根据对象的实际类型来确定调用哪个函数版本的。 4.3、虚函数的优点与注意事项 虚函数的主要优点是提高了代码的灵活性和可扩展性使得我们能够在不修改基类的情况下改变派生类的行为。然而在使用虚函数时也需要注意以下几点 性能开销 由于虚函数的调用涉及到虚函数表和虚指针的间接访问因此相对于非虚函数来说有一定的性能开销。在性能敏感的应用场景中需要谨慎使用虚函数。内存消耗 每个包含虚函数的类都会增加一个虚指针的内存开销用于指向虚函数表。虽然这个开销通常很小但在大量创建小对象时也可能成为问题。设计复杂度 虚函数的使用增加了设计的复杂性因为需要在基类和派生类之间维护一致的接口和行为。这要求开发者具备较高的设计能力和经验。 5、不能声明为虚函数的函数 在C中不能声明为虚函数的有非成员函数、构造函数、静态成员函数、内联成员函数以及友元函数。以下是这些函数的具体介绍 非成员函数 非成员函数不属于类的成员因此无法被继承或重写也就无法实现多态性。构造函数 构造函数在对象创建时调用而虚函数机制依赖于对象的类型信息虚表这在构造对象时尚未完全初始化因此构造函数不能被声明为虚函数。静态成员函数 静态成员函数与特定对象实例无关而是与类本身相关因此不支持多态性不能被声明为虚函数。内联成员函数 虽然技术上可以将虚函数声明为内联函数但这并不常见因为虚函数的动态绑定特性与内联函数的编译期展开特性存在冲突。友元函数 友元函数不是类的成员函数而是独立于类的外部函数因此不能被声明为虚函数。 6、纯虚函数 纯虚函数是在基类中声明的函数但没有提供实现。它的一般形式如下 virtual ReturnType FunctionName(Parameters) 0;这里的 0 表示这是一个纯虚函数。由于纯虚函数没有实现因此包含纯虚函数的类不能实例化。 示例 class Shape { public:// 纯虚函数用于计算面积virtual double area() const 0; };7、抽象类 抽象类是一种不能被实例化的类它通常用作其他类的基类。抽象类的主要特点是包含一个或多个纯虚函数。这些纯虚函数在抽象类中没有实现必须在派生类中提供具体实现。具备下面的特征如下 抽象性 抽象类不能被实例化只能通过其派生类来创建对象。纯虚函数 抽象类至少包含一个纯虚函数纯虚函数没有实现必须在派生类中重写。派生类实现 派生类必须实现所有继承自抽象类的纯虚函数否则派生类也将成为抽象类。 示例代码 #include iostream using namespace std;// 抽象基类 class Shape { public:// 纯虚函数计算面积virtual double area() const 0; // 纯虚函数 };// 派生类矩形 class Rectangle : public Shape { private:double width;double height; public:Rectangle(double w, double h) : width(w), height(h) {}// 实现纯虚函数double area() const override {return width * height;} };// 派生类圆形 class Circle : public Shape { private:double radius; public:Circle(double r) : radius(r) {}// 实现纯虚函数double area() const override {return 3.14159 * radius * radius;} };int main() {Shape* shapes[2];shapes[0] new Rectangle(5, 10);shapes[1] new Circle(7);for (int i 0; i 2; i) {cout Area: shapes[i]-area() endl;delete shapes[i];}return 0; } 8、总结 C中的多态性是一项强大的特性它允许通过统一的接口来访问不同类型的对象从而实现代码的高度复用和灵活扩展。然而多态性的实现也带来了一定的性能开销和设计复杂度。因此在使用多态性时需要权衡其带来的好处和挑战并根据具体的应用场景和需求来做出合理的选择。
http://www.hkea.cn/news/14416854/

相关文章:

  • 网站建立连接不安全怎么解决网站备案不能访问
  • 导购网站一站式建站南充楼市
  • 建瓯做网站的公司移动端网站欣赏
  • 外贸网站faqwordpress主题预览插件
  • 网站的功能目标设计一个网页要多少钱
  • 什么网站推广比较好山西网站建设鸣蝉
  • 想做外贸做哪些网站wordpress数据库权限
  • 广州做网站哪里有直播带货平台
  • 网站建设风险是什么意思frontpage怎么制作网页
  • 丰台手机网站设计阳江市问政平台留言
  • 城市联盟网站怎么做网站建设 长沙百姓网
  • 我看别人做系统就直接网站下载文件网站建设什么是静态网页
  • wordpress块引用整站seo免费咨询
  • 徐州自助建站系统建立团购网站
  • 石排镇网站建设公司重庆建一个网站
  • wordpress悬浮导航谷歌seo最好的公司
  • 网盘搜索网站如何做的冀州网站建设公司
  • 简约好看的网站互展科技网站建设
  • 凯里网站建设wordpress采集源码
  • 网站应该如何进行优化wordpress搬家之梦
  • 网站开发实例及研究青岛公司网站建设价格低
  • 云南网络推广公司排名wordpress怎样优化3
  • 湛江企业模板建站推荐个临汾做网站的
  • 苏州做网站专业的公司5188关键词平台
  • 网站建设服务器介绍图片湘潭做网站广告的公司
  • 金阊公司网站建设电话怎样在国外网站上做外贸广告
  • 百合网网站建设与策划wordpress怎么备份
  • 郑州网站推广方案网站建设流程 文档
  • 电子商务网站包括怎么样用手机做网站关键词
  • 公司的宣传网站应该怎么做小程序开发平台官网入口