首页 > 其他分享 >九、virtual关键字

九、virtual关键字

时间:2024-02-23 16:14:50浏览次数:20  
标签:makeSound 函数 基类 多态 virtual 关键字 派生类

九、virtual关键字

为什么要使用虚函数:

  1. 多态:虚函数允许我们通过基类指针或引用来调用派生类的实现,从而实现多态。这使得我们可以编写更通用、可扩展的代码。
  2. 可扩展性:通过使用虚函数,我们可以轻松地添加新的派生类,而无需修改现有的基类代码。
  3. 代码重用:虚函数允许派生类重用和扩展基类的功能,而无需完全重写函数。

如下是一个虚函数示例:

#include <iostream>

class Animal {
public:
    virtual void makeSound() {
        std::cout << "The animal makes a sound" << std::endl;
    }
};

class Dog : public Animal {
public:
    void makeSound() override {
        std::cout << "The dog barks" << std::endl;
    }
};

int main() {
    Animal* animal = new Dog();
    animal->makeSound(); // 输出 "The dog barks"
    delete animal;
    return 0;
}

在这个例子中,Animal 类有一个虚函数 makeSound(),Dog 类继承了 Animal 类并重写了 makeSound() 函数。当我们通过基类指针调用 makeSound() 时,实际上调用的是派生类 Dog 的实现。这就是虚函数实现多态的一个例子[1]


  1. 鱼先知:# c++ 什么是虚函数?为什么要使用虚函数 ↩︎

标签:makeSound,函数,基类,多态,virtual,关键字,派生类
From: https://www.cnblogs.com/XiongHaiyang/p/18029793

相关文章

  • const与mutable关键字
    1异步操作,使用lambda表达式,参数采用传值方式;window直接修改传输参数的值,并打印使用正常;linux报错:errorpassingconst**asthisargumentof**discardsqualifier[-fpermissive]const关键字用于类的成员函数,成为常成员函数,即:不允许在常成员函数的内部(实现里)修改......
  • Java基础02:标识符和关键字
    1.标识符1.1关键字 Java所有组成的部分都需要名字。类名、变量名以及方法名都被称为标识符。1.2标识符注意点1.2.1所有的标识符都应该以字母(A-Z或者a-z),美元符($)、或者下划线(_)开始1.2.2首字符之后可以是字母(A-Z或者a-z),美元符($)、或者......
  • linux统计字符串出现次数(linux查询关键字出现的个数了解)
     使用脚本统计字符串出现次数#!/bin/bash#获取要监控的本地服务器IP地址IP=`ifconfig|grepinet|grep-vE'inet6|127.0.0.1'|awk'{print$2}'`echo"IP地址:"$IP#获取cpu总核数cpu_num=`grep-c"modelname"/proc/cpuinfo`echo"cpu总核数:&q......
  • 多线程系列(四) -volatile关键字使用详解
    一、简介在上篇文章中,我们介绍到在多线程环境下,如果编程不当,可能会出现程序运行结果混乱的问题。出现这个原因主要是,JMM中主内存和线程工作内存的数据不一致,以及多个线程执行时无序,共同导致的结果。同时也提到引入synchronized同步锁,可以保证线程同步,让多个线程依次排队执行......
  • C#关键字常见面试题
    获取C#/.NET/.NETCore面试宝典(基础版)欢迎关注微信公众号:追逐时光者,回复关键字【面试】,领取语雀在线免费的面试宝典(目前阅读量已突破15万+)。不仅仅为了面试而学习,更多的是查漏补缺、扩充知识面和大家共同学习进步(文章中有描述不当的地方欢迎文末留言指正,我会及时改正......
  • 多线程系列(三) -synchronized 关键字使用详解
    一、简介在之前的线程系列文章中,我们介绍了线程创建的几种方式以及常用的方法介绍。今天我们接着聊聊多线程线程安全的问题,以及解决办法。实际上,在多线程环境中,难免会出现多个线程对一个对象的实例变量进行同时访问和操作,如果编程处理不当,会产生脏读现象。二、线程安全问题介......
  • kotlin--Object关键字
    1.匿名内部类Object可以实现,继承一个抽象类的同时,实现多个接口。interfaceA{funfunA()}interfaceB{funfunB()}abstractclassMan{abstractfunfindMan()}funmain(){//这个匿名内部类,在继承了Man类的同时,还实现了A、B两个接口......
  • Qt error: LNK2001: 无法解析的外部符号 “public: virtual struct QMetaObject const
    简介  通过QtCreator开发一个动态库,最开始希望只是一个简单的纯C++的动态库,就没有继承QObject,也没有写Q_OBJECT宏。编译时就会报:LNK2001:无法解析的外部符号public:virtualstructQMetaObjectconst。绕了不少弯子,终于解决了,把原因分析进行个整理。面试有个问题:Qt信号槽机......
  • Qt error: LNK2001: 无法解析的外部符号 "public: virtual struct QMetaObject const
    这个问题总是在编译的不经意间出现,而且一出一大片,很烦。作为新手出了问题可定要在网上找答案,但是总是发现别人的解决方法解决不了自己的问题,唉~在这个问题上大家大家提出的大多数是.h.cpp文件不对应、.h中声明的文件在.cpp文件中没有实现、函数声明在了.cpp文件中等等一......
  • 关键字和标识符
    1.关键字是什么 不用刻意记,不小心用了会报错。 (报错图)2.标识符是什么 (依旧不用记忆,只要记住强制要求就行) ......