C++ 之函数重写

在C++中,函数重写(Function Overriding)是一种面向对象编程的概念,它允许派生类重新定义基类中已经定义的虚函数。函数重写用于实现多态性,使得程序能够在运行时选择调用哪个版本的函数,以便适应不同的对象类型。

以下是函数重写的基本原则:

基类中的虚函数声明: 在基类中,通过使用关键字 virtual 来声明一个虚函数。虚函数在基类中的声明为:

class Base {
public:virtual void myFunction() {// 函数体}
};

派生类中的函数重写: 派生类可以通过重新定义基类中的虚函数来实现函数重写。在派生类中,函数的声明和定义需要与基类中的虚函数一致,包括函数签名和返回类型。使用 override 关键字可以确保派生类中的函数确实是对基类虚函数的重写。


class Derived : public Base {
public:void myFunction() override {// 重新定义的函数体}
};

运行时多态性: 使用基类指针或引用指向派生类对象,并调用虚函数时,将会根据对象的实际类型调用相应的函数。这种行为称为运行时多态性。

int main() {Base* basePtr = new Derived();basePtr->myFunction();  // 调用派生类中的函数delete basePtr;return 0;}

总体来说,函数重写允许在派生类中提供对基类虚函数的新实现,使得代码更具灵活性和可扩展性。请注意,只有虚函数才能被重写。
下面这个是实例:

#include <iostream>
#include <string>// 基类(父类)
class Animal {
public:// 纯虚函数virtual void sleep() const = 0;// 虚函数virtual std::string makeSound() const {return "Animal makes a generic sound";}
};// 派生类(子类)1
class Dog : public Animal {
public:// 重写基类中的虚函数std::string makeSound() const override {return "Dog barks: Woof! Woof!";}// 实现基类的纯虚函数void sleep() const override {std::cout << "Dog is sleeping in its bed." << std::endl;}// Dog 类自己的其他成员函数void fetch() const {std::cout << "Dog fetches a ball." << std::endl;}
};// 派生类(子类)2
class Cat : public Animal {
public:// 重写基类中的虚函数std::string makeSound() const override {return "Cat meows: Meow! Meow!";}// 实现基类的纯虚函数void sleep() const override {std::cout << "Cat is napping on the windowsill." << std::endl;}// Cat 类自己的其他成员函数void climbTree() const {std::cout << "Cat climbs a tree." << std::endl;}
};int main() {// 创建基类对象// Animal genericAnimal; //基类是抽象类(因为有虚函数),不能被实例化// 调用基类的虚函数// std::cout << "Generic Animal Sound: " << genericAnimal.makeSound() << std::endl;std::cout << "------------------------" << std::endl;// 创建派生类对象1Dog myDog;// 调用派生类的虚函数,实际上调用的是子类的版本std::cout << "Dog Sound: " << myDog.makeSound() << std::endl;// 调用派生类自己的其他成员函数myDog.fetch();std::cout << "------------------------" << std::endl;// 创建派生类对象2Cat myCat;// 调用派生类的虚函数,实际上调用的是子类的版本std::cout << "Cat Sound: " << myCat.makeSound() << std::endl;// 调用派生类自己的其他成员函数myCat.climbTree();return 0;
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/240099.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【湖仓一体尝试】MYSQL和HIVE数据联合查询

爬了两天大大小小的一堆坑&#xff0c;今天把一个简单的单机环境的流程走通了&#xff0c;记录一笔。 先来个完工环境照&#xff1a; mysqlhadoophiveflinkicebergtrino 得益于IBM OPENJ9的优化&#xff0c;完全启动后的内存占用&#xff1a; 1&#xff09;执行联合查询后的…

AI时代Python量化交易实战:ChatGPT引领新时代

文章目录 《AI时代Python量化交易实战&#xff1a;ChatGPT让量化交易插上翅膀》关键点内容简介作者简介购买链接 《AI时代架构师修炼之道&#xff1a;ChatGPT让架构师插上翅膀》关键点内容简介作者简介 赠书活动 《AI时代Python量化交易实战&#xff1a;ChatGPT让量化交易插上翅…

登录界面UI开发 - 登录注册开发入门(1)

登录页面 UI 设计教程&#xff1a;多八多 Ai 助手的实战演示 第一课&#xff1a;设计UI界面 欢迎来到多八多Ai应用开发助手登录页面开发教程&#xff01;本教程由讲师小多主讲&#xff0c;将教授如何使用多八多Ai应用开发助手设计登录页面的用户界面&#xff08;UI&#xff09…

Python深度学习028:神经网络模型太多,傻傻分不清?

文章目录 深度学习网络模型常见CNN网络深度学习网络模型 在深度学习领域,有许多常见的网络模型,每种模型都有其特定的应用和优势。以下是一些广泛使用的深度学习模型: 卷积神经网络(CNN): 应用:主要用于图像处理,如图像分类、物体检测。 特点:利用卷积层来提取图像特…

最近怎么流量涨这么多?那我开始讲Hive特性了!

Hive架构原理 a.用户接口&#xff1a;Client CLI&#xff08;Hive shell&#xff09;、JDBC/ODBC(java访问hive)、Hive WEBUI&#xff08;浏览器访问hive&#xff09;和Thrift服务器 b.驱动器&#xff1a;Driver解析器&#xff08;SQL Parser&#xff09;&#xff1a;将SQL字…

pvk2pfx.exe makecert.exe 文件路径

文件路径 C:\Program Files (x86)\Windows Kits\10\bin\XXXXX\x86

GBASE南大通用数据库在Windows和Linux中创建数据源

Windows 中数据源信息可能存在于两个地方&#xff1a;在 Windows 注册表中&#xff08;对 Windows 系统&#xff09;&#xff0c; 或在一个 DSN 文件中&#xff08;对任何系统&#xff09;。 如果信息在 Windows 注册表中&#xff0c;它叫做“机器数据源”。它可能是一个“用 …

产品原型设计软件 Axure RP 9 mac支持多人写作设计

axure rp 9 mac是一款产品原型设计软件&#xff0c;它可以让你在上面任意构建草图、框线图、流程图以及产品模型&#xff0c;还能够注释一些重要地方&#xff0c;axure rp汉化版可支持同时多人写作设计和版本管理控制&#xff0c;这款交互式原型设计工具可以帮助设计者制作出高…

软件工程中关键的图-----知识点总结

目录 1.数据流图 2.变换型设计和事务型设计 3.程序流程图 4.NS图和PAD图&#xff1a; 5.UML图 1.用例图 2.类图 3.顺序图 4.协作图 本文为个人复习资料&#xff0c;包含个人复习思路&#xff0c;多引用&#xff0c;也想和大家分享一下&#xff0c;希望大家不要介意~ …

PCL配置记录

PCL配置记录 1. Windows10vs2019pcl win10vs2019pcl 1.11.1 1.下载与安装 https://github.com/PointCloudLibrary/pcl/releases ) 双击exe安装 注意&#xff1a; ( ) 解压 “pcl-1.11.0-pdb-msvc2019-win64.zip”&#xff0c;将解压得到的文件夹中的内容添加“…\PCL…

基于JAVA的厦门旅游电子商务预订系统 开源项目

目录 一、摘要1.1 项目介绍1.2 项目录屏 二、功能模块2.1 景点类型模块2.2 景点档案模块2.3 酒店管理模块2.4 美食管理模块 三、系统设计3.1 用例设计3.2 数据库设计3.2.1 学生表3.2.2 学生表3.2.3 学生表3.2.4 学生表 四、系统展示五、核心代码5.1 新增景点类型5.2 查询推荐的…

TYPE C 接口知识详解

1、Type C 概述 Type-C口有4对TX/RX分线&#xff0c;2对USBD/D-&#xff0c;一对SBU&#xff0c;2个CC&#xff0c;另外还有4个VBUS和4个地线。 当Type-C接口仅用作传输DP信号时&#xff0c;则可利用4对TX/RX&#xff0c;从而实现4Lane传输&#xff0c;这种模式称为DPonly模式…

android 9 adb安装过程学习(四)覆盖安装

六、PackageManagerService.replacePackageLIF - 覆盖安装 一、参数分析 位置&#xff1a;"frameworks/base/services/core/java/com/android/server/pm/PackageManagerService.java" 这里我们来回顾下传入的参数&#xff1a;final int policyFlags 就是我们之前的…

背包小专题

背包小专题 1. CF106C Buns题目描述题目概况思路点拨代码实现 2. CF864E Fire题目描述题目概况思路点拨代码实现 3. CF366C Dima and Salad题目描述题目概况思路点拨背包瓶颈解决方法 代码实现 4. CF1132E Knapsack题目描述题目概况思路点拨代码实现 5. CF632E Thief in a Shop…

Leetcode 435 无重叠区间

题意理解&#xff1a; 给定一个区间的集合 intervals 要求需要移除区间&#xff0c;使剩余区间互不重叠 目标&#xff1a;最少需要移除几个区间。 解题思路&#xff1a; 采用贪心思路解题&#xff0c;什么是全局最优解&#xff0c;什么是局部最优解。 全局最优解&#xff0c;删…

使用Java语言判断一个年度是不是闰年

一、 代码说明 引入Scanner函数&#xff0c;将类命名为Judge类&#xff0c;使用try语句和catch语句将整体代码包围起来&#xff0c;使用if语句来判断是否为闰年&#xff0c;输入年份&#xff0c;然后得到相应的结论。 二、代码 import java.util.Scanner; public class Judg…

叮咚,微信年度聊天报告(圣诞节版)请查收~丨GitHub star 16.8k+

微信年度聊天报告——圣诞节特别版&#xff0c;快发给心仪的ta吧~ 开源地址 GitHub开源地址&#xff1a;https://github.com/LC044/WeChatMsg 我深信有意义的不是微信&#xff0c;而是隐藏在对话框背后的一个个深刻故事。未来&#xff0c;每个人都能拥有AI的陪伴&#xff0c;…

Microsoft Store 里有哪些好用的软件?

Windows 应用商店还是有不少干货软件的。 下面给大家推荐 12 款 Windows 应用商店里优秀实用的 UWP 应用软件&#xff0c;无广告、不流氓、体验好&#xff0c;强烈建议收藏&#xff01; 而且经过商店审核和限制&#xff0c;也更加安全、干净&#xff0c;不用担心有乱七八糟的…

内存管理学习

内存管理 在计算系统中&#xff0c;通常存储空间分为两种&#xff1a;内部存储空间和外部存储空间。 内部存储空间通常访问速度比较快&#xff0c;能够按照变量地址随机访问&#xff0c;也就是我们通常所说的RAM&#xff08;随机存储器&#xff09;&#xff0c;可以把它理解为…

Unity 问题 之 ScrollView ,LayoutGroup,ContentSizeFitter 一起使用时,动态变化时无法及时刷新更新适配界面的问题

Unity 问题 之 ScrollView ,LayoutGroup,ContentSizeFitter 一起使用时&#xff0c;动态变化时无法及时刷新更新适配界面的问题 目录 Unity 问题 之 ScrollView ,LayoutGroup,ContentSizeFitter 一起使用时&#xff0c;动态变化时无法及时刷新更新适配界面的问题 一、简单介绍…