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

廊坊网站快照优化公司网页设计基础教学

廊坊网站快照优化公司,网页设计基础教学,企业服务咨询,小型 网站 源码在 C 面向对象编程领域#xff0c;多态性堪称核心概念#xff0c;而虚函数则是实现运行时多态的关键所在。 一、虚函数的概念与作用 1.1 什么是虚函数 虚函数是 C 中用于实现动态多态的成员函数。在基类中使用virtual关键字声明虚函数后#xff0c;派生类能够重写#x…在 C 面向对象编程领域多态性堪称核心概念而虚函数则是实现运行时多态的关键所在。 一、虚函数的概念与作用 1.1 什么是虚函数 虚函数是 C 中用于实现动态多态的成员函数。在基类中使用virtual关键字声明虚函数后派生类能够重写override该函数。这样一来当通过基类指针或引用调用此函数时实际执行的将是派生类中的函数版本。 class Animal { public:virtual void makeSound() {cout Animal sound! endl;} };class Dog : public Animal { public:void makeSound() override {cout Woof! endl;} }; // 使用示例 Animal* animal new Dog(); animal-makeSound(); 上述代码中Animal类声明了虚函数makeSoundDog类继承自Animal类并重写了makeSound函数。通过Animal类型的指针调用makeSound函数时实际调用的是Dog类中的makeSound函数输出 “Woof!”。 1.2 虚函数的作用 运行时多态根据对象的实际类型来决定调用哪个函数实现了动态绑定提高了代码的灵活性和可扩展性。 代码扩展性允许新增派生类而无需修改基类代码符合开闭原则使程序更易于维护和升级。 二、虚函数表vTable机制 2.1 虚函数表的结构 每个包含虚函数的类都拥有一个虚函数表vTable它本质上是一个函数指针数组存储着该类所有虚函数的地址。编译器会为每个对象添加一个隐藏指针vPtr该指针指向其所属类的虚函数表。 2.2 动态绑定的实现 当通过基类指针调用虚函数时程序会按以下步骤执行 通过对象的 vPtr 找到虚函数表。根据函数在表中的偏移量定位具体函数地址。执行派生类的函数实现。 三、哪些函数可以是虚函数 虚函数的调用依赖虚函数表指针同一个类所有对象拥有同一个虚函数表但是每个对象都有自己独立的虚表指针。所以虚函数的调用需要借用this指针指向虚函数表。 3.1 普通成员函数 这是最常见的虚函数形式。只需在基类的成员函数声明前加上virtual关键字就可以允许派生类对其进行重写。 class Base { public: virtual void func() { /*... */ } }; 3.2 析构函数 特别强调基类的析构函数必须声明为虚函数。这是为了确保在释放派生类对象时能够正确调用派生类和基类的析构函数避免内存泄漏。 class Base { public: virtual ~Base() { /* 释放基类资源 */ } }; class Derived : public Base { public: ~Derived() override { /* 释放派生类资源 */ } }; Base* obj new Derived(); delete obj; 3.3 纯虚函数 纯虚函数通过 0语法进行定义它使类成为抽象类强制要求派生类必须实现该函数。 class Shape { public: virtual void draw() 0; }; 四、哪些函数不能是虚函数 4.1 构造函数 构造函数不能是虚函数。原因在于对象构造时需要先确定其类型而虚函数机制依赖于已初始化的 vPtr在构造函数执行期间vPtr 尚未建立无法实现虚函数调用。以下代码无法编译 4.2 静态成员函数 静态函数属于类而非对象不依赖 vPtr。因此静态成员函数不能声明为虚函数。 4.3 友元函数 友元函数不属于类的成员函数没有继承特性也就不存在虚函数的概念。 4.4 内联函数 从技术上来说内联函数可以声明为虚函数但inline关键字仅是对编译器的一种建议要求编译器将函数体直接嵌入到调用处以提高执行效率。而虚函数的调用需要在运行时动态确定函数地址这与内联函数的编译时展开特性相悖。因此当虚函数声明为inline时编译器通常会忽略该关键字。 4.5 全局函数和普通函数 虚函数必须是类的成员函数全局函数和普通函数不属于任何类因此不能声明为虚函数。 五、虚函数的注意事项 性能开销虚函数调用涉及查表过程相较于普通函数调用会有一定的性能损耗。 内存占用每个对象需要额外存储 vPtr通常占用 4/8 字节的内存空间这在对象数量较多时可能会对内存使用产生一定影响。 设计建议若基类可能被继承析构函数应声明为虚函数以确保资源的正确释放。 六、总结 可以是虚函数普通成员函数、析构函数、纯虚函数。 不能是虚函数构造函数、静态成员函数、友元函数、全局函数和普通函数以及声明为虚函数但无实际意义的内联函数。 虚函数表是实现动态多态的基石深入理解其机制能够帮助我们更好地优化代码结构提升程序性能。在实际编程中应根据具体需求合理使用虚函数充分发挥 C 面向对象编程的优势。
http://www.hkea.cn/news/14356932/

相关文章:

  • 网站建设需要什么资料可以做营销任务的网站
  • 怎样做网站备案wordpress 勾子
  • 中国建设银行 英文网站房产信息网的官网链接
  • 制作网站的代码小学生家长网站建设需求
  • 贵州贵州省住房和城乡建设厅网站找人做菠菜网站需要多少钱
  • 网站建设可研建设银行网站显示404
  • 小型企业的网站建设论文建设局局长有实权吗
  • 外卖做的比较好的网站辽宁模板网站建设公司
  • 做网站网站建设教程做网站的大型公司
  • 个人承接网站建设甘肃网络营销是什么
  • 网站开发及服务合同网站设计建设专业服务
  • 谷歌找网站后台让别人做网站的话术
  • 做网站电子版报价模板网页开发者工具怎么用
  • 做一个销售网站需要多少钱做网站是用c 吗
  • 程序员做网站美工能过关吗免费模板建站
  • 丰浩网站建设中心网站建设筹备方案
  • 汽配信息门户网站模板网络推广公司营业执照
  • 金融理财网站建设莲湖微网站建设
  • 儿童网站开发 论文装潢设计装修
  • 肥料网站建设 中企动力平面广告设计要学的软件
  • 做流量网站要做哪一种河北招投标公共服务平台
  • 网站首页布局seo国外校园网站建设
  • 做棋牌开发的网站竞价软件哪个好
  • 网站ip和pv网站怎么添加广告
  • 女朋友在互联网公司做网站国防教育网站建设方案
  • 肇庆高端品牌网站建设wordpress 怎么打开
  • 购物网站建设款流程如何查询网站的空间
  • 一个网站开发流程网站seo诊断书
  • 灵犀 科技高端网站建设企业邮箱要钱吗
  • 后台网站下载学前端要多久