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

skype在网站上怎么做链接如何在电脑上打开自己做的网站

skype在网站上怎么做链接,如何在电脑上打开自己做的网站,国外室内设计网站大全,做淘客网站用备案吗文章目录 一、多态1、概念2、多态实现方式3、动态绑定与静态绑定4、虚函数4.1、声明与定义4.2、虚函数的工作原理4.3、虚函数的优点与注意事项 5、不能声明为虚函数的函数6、纯虚函数7、抽象类8、总结 前言: 在C编程语言中,多态性(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.yayakq.cn/news/556755/

相关文章:

  • 电子商务网站建设工具360广告联盟平台
  • 做外贸网站特色淄博微网站建设
  • 招聘网站做招聘顾问seo网站优化技术
  • 烟台网站建设询问企汇互联专业腾讯服务器
  • 上海网站建设索王道下拉如何套用网站模板
  • 做外贸哪个网站可以接单搭建微网站平台
  • 农业建设公司网站关键词优化技巧
  • 河北建设行业信息网站企业vi包括哪些内容
  • 前端怎么在猪八戒网站接单做企业网站趋势
  • 新能源 东莞网站建设南京网站建设哪家专业
  • 网站制作语言有哪些建站过程
  • 梅河口市建设局网站哪里有免费的网站推广服务
  • 广西网站建设方案跑业务用什么软件找客户
  • 网站设计师发展方向湖南城乡住房建设厅网站
  • 资源网站如何做网页制作程序代码
  • 网络营销环境分析主要包括网站的描述 都应该写 什么 优化
  • 信誉好的手机网站建设辅导机构
  • 手机版网站开发的功能点火车头发布到wordpress
  • 做一个网站完整的网页dw怎么做百度网站
  • 做宽屏网站网页设计与制作千年之恋代码
  • 绍兴网站建设开发业务员销售管理软件
  • 大作设计网站是中国的吗企业做网站公司排名口碑
  • 网站转化率分析工具在那些网站上做企业宣传好
  • 许昌长葛网站建设制作设计网页制作员薪资
  • 福州网站seo优化公司百度手机助手
  • 十堰网站建设联系电话dw做的网站怎样做成手机版的
  • 如何增加网站关键词重庆面条制作
  • 设计师网站哪个好信用网站标准化建设模块都有哪些
  • 凡科网怎么创建网站英文网站建设怎么收费
  • 营销型网站制作公众号开发合同模板