广告位联系
返回顶部
分享到

C++中什么是虚函数

C语言 来源:互联网 作者:佚名 发布时间:2025-01-28 23:30:25 人浏览
摘要

简单地说,那些被virtual关键字修饰的成员函数,就是虚函数。 首先:强调一个概念定义一个函数为虚函数,不代表函数为不被实现的函数。定义它为虚函数是为了允许用基类的指针来调用子类

简单地说,那些被virtual关键字修饰的成员函数,就是虚函数。

首先:强调一个概念定义一个函数为虚函数,不代表函数为不被实现的函数。定义它为虚函数是为了允许用基类的指针来调用子类的这个函数。定义一个函数为纯虚函数,才代表函数没有被实现。定义纯虚函数是为了实现一个接口,起到一个规范的作用,规范继承这个类的程序员必须实现这个函数。

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

class Animal

{

public:

    //Speak函数就是虚函数

    //函数前面加上virtual关键字,变成虚函数,那么编译器在编译的时候就不能确定函数调用了。

    virtual void speak()

    {

        cout << "动物在说话" << endl;

    }

};

 

class Cat :public Animal

{

public:

    void speak()

    {

        cout << "小猫在说话" << endl;

    }

};

 

int main() {

    Animal* a = new Cat(); //

    a->speak();//小猫在说话

    Animal b = Cat();

    b.speak();//动物在说话,不明白这里为什么没有发生多态

    system("pause");

    return 0;

}

这个例子是虚函数的一个典型应用,通过这个例子,也许你就对虚函数有了一些概念。它虚就虚在所谓“推迟联编”或者“动态联编”上,一个类函数的调用并不是在编译时刻被确定的,而是在运行时刻被确定的。由于编写代码的时候并不能确定被调用的是基类的函数还是哪个派生类的函数,所以被成为“虚”函数。 虚函数只能借助于指针或者引用来达到多态的效果。


版权声明 : 本文内容来源于互联网或用户自行发布贡献,该文观点仅代表原作者本人。本站仅提供信息存储空间服务和不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权, 违法违规的内容, 请发送邮件至2530232025#qq.cn(#换@)举报,一经查实,本站将立刻删除。
原文链接 :
相关文章
  • 使用Cline+deepseek实现VsCode自动化编程

    使用Cline+deepseek实现VsCode自动化编程
    不知道大家有没有听说过cursor这个工具,类似于AI+VsCode的结合体,只要绑定chatgpt、claude等大模型API,就可以实现对话式自助编程,简单闲聊
  • C++中什么是虚函数
    简单地说,那些被virtual关键字修饰的成员函数,就是虚函数。 首先:强调一个概念定义一个函数为虚函数,不代表函数为不被实现的函数。
  • Qt实现文件的压缩和解压缩操作

    Qt实现文件的压缩和解压缩操作
    一、实现方式 通过Qt自带的库来实现,使用多线程方式,通过信号和槽来触发压缩与解压缩,并将压缩和解压缩结果回传过来。 使用的类:
  • 利用Qt实现FTP服务器并支持多客户端登录

    利用Qt实现FTP服务器并支持多客户端登录
    一、效果展示 二、源码实现 由于源码较多,只分享其中一部分 ftpserverwidget.h 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 3
  • C++11的函数包装器std::function使用
    C++中的函数包装器(Function Wrapper)是用来封装和管理函数或可调用对象(如函数指针、函数对象、Lambda 表达式等)的工具。它们使得函数的
  • C++指针和对象成员访问的区别:`.` 与 `->` 的使
    在学习 C++ 时,常常会遇到访问对象成员的两种符号:.和-。这两个符号看似简单,但它们的正确使用却需要理解指针和对象的本质差异。对
  • C++中std::thread{}和std::thread()用法
    std::thread{}和std::thread()用法 在C++中,std::thread是用于处理线程的类。 关于std::thread{}和std::thread()的区别,主要涉及到C++11引入的统一初始化(
  • Qt实现日志文件的滚动写入
    Qt 日志文件的滚动写入 flyfish 日志文件的滚动写入功能。在日志文件达到10MB时创建新的日志文件,并且在总日志文件大小达到10GB时开始覆盖
  • Java打印星号图案和数字图案的代码
    使用循环和控制语句打印图案 在 Java 中,使用循环和控制语句是打印图案的最佳方法。循环可以帮助你重复执行一段代码,直到满足某个条
  • 解读构造函数的调用规则、深拷贝与浅拷贝

    解读构造函数的调用规则、深拷贝与浅拷贝
    1.调用规则 默认情况下,C++至少会给一个类添加三个函数: 默认构造函数(无参,函数体为空) 默认析构函数(无参,函数体为空) 默认
  • 本站所有内容来源于互联网或用户自行发布,本站仅提供信息存储空间服务,不拥有版权,不承担法律责任。如有侵犯您的权益,请您联系站长处理!
  • Copyright © 2017-2022 F11.CN All Rights Reserved. F11站长开发者网 版权所有 | 苏ICP备2022031554号-1 | 51LA统计