博客
关于我
C++学习日记1——多态篇的虚函数
阅读量:544 次
发布时间:2019-03-09

本文共 1143 字,大约阅读时间需要 3 分钟。

多态性在软件工程中,多态性是指一种对象的多种行为该行为可以根据其具体的类型被选择。这种行为概念在面向对象编程中尤为重要,特别是在继承关系中。

多态类型多态类型指的是具有继承关系的多个类型。这意味着如果一个基类定义了一些成员函数,那么在派生类中可能会覆盖或扩展这些成员函数。

虚函数虚函数是解决多态性问题的标准方法。当你以基类指针指向派生类对象时,你只能访问基类定义的成员函数,除非基类中定义了虚函数。虚函数通过构建一个虚函数表来解决这个问题,使得系统能够在运行时根据对象的实际类型调用正确的函数。

同名成员函数如果基类和派生类同时定义了同名成员函数,那么调用时会调用哪一个?其实这取决于虚函数的状态。虚函数的存在将确保调用的是派生类的函数,而不是基类的。虚函数可以用来覆盖基类的同名函数。

虚析构函数在动态多态中,使用虚析构函数可以避免内存泄漏。当一个派生类对象被分配给了一个基类指针时,基类的析构函数可能无法正确释放派生类对象中的内存。虚析构函数会允许派生类先释放其自己的资源,然后基类的析构函数才能被调用。

虚函数的用法在C++中,虚函数可以用来生 مانند这样:在基类中声明虚函数,然后在派生类中重新声明或实现这些函数。但请记住,虚函数只适用于在子类中定义,而不是用于全局函数。

继承虚函数在C++中,继承虚函数的正确做法是确保基类中的函数或析构函数都有虚关键字。这样在派生类中,默认就会继承这些虚函数。如果基类没有声明虚函数,那么派生类也不会有相应的虚函数表,这可能导致无法正确多态。

函数的覆盖和隐藏在多态性中,有名函数的覆盖意味着派生类实际调用的是其自己的函数,而不是基类的。这与隐藏不同,隐藏是让派生类的函数完全覆盖基类的函数,除非被显式调用。虚函数的存在通常意味着函数被覆盖,而不是隐藏。

虚函数表虚函数表在对象中存储函数入口地址,当基类中有虚函数时,虚函数表会自动生成。每个类只有一个虚函数表,所有对象共享同一表。如果派生类中没有定义虚函数,那么它会自动继承基类的虚函数表。

虚析构函数的原理虚析构函数的作用是让派生类的析构函数先被调用,这确保所有派生类的资源都被正确释放,然后基类的析构函数才被调用。这样就避免了内存泄漏的问题,特别是在动态分配内存时。

对象大小sizeof()操作符返回的是对象的大小,包括成员数据的大小。对于没有数据成员的对象,默认会分配一个字节内存。然而,如果类中有虚函数或虚析构函数,对象仍然会分配额外的内存来存储虚函数表指针,这会增加对象的大小(通常是4字节)。

理解多态性与虚函数多态性是面向对象编程中的一个核心概念,允许同一类实例根据其类型进行不同的行为。在C++中,虚函数就是实现多态性机制的关键工具,通过构建虚函数表来实现这一点。

转载地址:http://fjzsz.baihongyu.com/

你可能感兴趣的文章
php截取字符串代码,PHP字符串截取_php
查看>>
php截取字符串,无乱码
查看>>
php手冊,php手冊之變量范圍
查看>>
PHP手机号码归属地查询API接口
查看>>
PHP执行耗时脚本实时输出内容
查看>>
PHP扩展安装
查看>>
php把get参数放入数组_php怎么将数组转为url参数?
查看>>
php操作mysql用select_php如何操作mysql获取select 结果
查看>>
PHP操作符与控制结构
查看>>
PHP支付宝SDK使用,电脑网页支付
查看>>
php支付宝手机网页支付类实例
查看>>
php教程之php空白页的原因及解决方法
查看>>
PHP数据库操作
查看>>
PHP数据文件过大,导致PHP加速器eaccelerator在PHP5.2版本下崩溃
查看>>
RabbitMQ - 死信、TTL原理、延迟队列安装和配置
查看>>
PHP数据访问的多重查询(租房子查询)
查看>>
RabbitMQ - 基于 SpringAMQP 带你实现五种消息队列模型
查看>>
php数组函数分析--array_column
查看>>
php数组去重复数据的小例子
查看>>
php数组实现:哈希 +双向链表
查看>>