【C++】虚函数

news2024/10/1 7:29:50

2023年8月23日,周三上午


目录

  • 虚函数
  • 在派生类中重写虚函数
  • 纯虚函数
  •  示例程序

虚函数

  • 在函数返回值前面加上关键字virtual
  • 虚函数必须在类中声明,否则会报错“[Error] 'virtual' outside class declaration”
class Base {
public:
    virtual void func(); // 声明虚函数
};

在派生类中重写虚函数

  • 使用关键字override来明确指出这是对基类虚函数的重写
  • 在派生类中重新定义虚函数,使用相同的函数签名(函数名和参数列表)
class Derived : public Base {
public:
  void func() override; // 重写虚函数
};

虚函数可以在基类中有默认实现,派生类可以选择是否重写该函数。

纯虚函数

通过把0赋值给虚函数来声明纯虚函数

class Base {
public:
  virtual void func()=0; // 声明纯虚函数
};

在基类中声明纯虚函数后,派生类如果不重写(override)该函数,

则派生类将被认为也是一个抽象类

抽象类和普通类有什么区别?

抽象类不能被实例化,即不能创建抽象类的对象。只能通过派生类来创建对象。

而普通类可以直接实例化,通过类名创建对象。

 示例程序

#include<iostream>

class Animal{
public:
	virtual void speak();
};

class Dog:public Animal{
public:
	void speak() override{
		std::cout<<"汪汪"<<std::endl;
	}
};

class Cat:public Animal{
public:
	void speak() override{
		std::cout<<"喵喵"<<std::endl;
	}
};

int main(){
	Dog d;
	d.speak();
	Cat c;
	c.speak();
}

 

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

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

相关文章

HDLBits-Verilog学习记录 | Verilog Language-Basics(2)

文章目录 9.Declaring wires | wire decl10. 7458 chip 9.Declaring wires | wire decl problem:Implement the following circuit. Create two intermediate wires (named anything you want) to connect the AND and OR gates together. Note that the wire that feeds the …

Easy Rules规则引擎(2-细节篇)

目录 一、序言二、规则引擎参数配置实例1、skipOnFirstAppliedRules示例(1) FizzRule(2) BuzzRule(3) FizzBuzzRule(4) onFizzBuzzRule(5) FizzBuzzRulesLauncher 2、skipOnFirstNonTriggeredRule示例3、skipOnFirstFailedRule示例 三、组合规则1、UnitRuleGroup组合规则2、Act…

Docker容器与虚拟化技术:Docker compose部署LNMP

目录 一、理论 1.LNMP架构 2.背景 3.Dockerfile部署LNMP 3.准备Nginx镜像 4.准备MySQL容器 5.准备PHP镜像 6.上传wordpress软件包 7.编写docker-compose.yml 8.构建与运行docker-compose 9.启动 wordpress 服务 10.浏览器访问 11.将运行中的 docker容器保存为 doc…

react +Antd Cascader级联选择使用接口数据渲染

1获取接口数据并将数据转换成树形数组 useEffect(() > {axios.get(/接口数据, {params: {“请求参数”},}).then((res) > {console.log(res);const getTreeData (treeData, pid) > {// 把数据转化为树型结构let tree [];let currentParentId pid || 0;for (let i …

并发式编程的相关知识--notify和wait、CompletableFuture

1.notify和wait方法的使用 1.1快递到站通知 说明&#xff1a;快递的地点在上海&#xff0c;离快递发货地相聚500km&#xff0c;每次进行改变&#xff0c;快递将会前进100km,当快递前进100km时&#xff0c;需要通知快递当前的位置&#xff0c;当快递到达目的地时&#xff0c;需…

【学习FreeRTOS】第15章——FreeRTOS队列集

1.队列集简介 一个队列只允许任务间传递的消息为同一种数据类型&#xff0c;如果需要在任务间传递不同数据类型的消息时&#xff0c;那么就可以使用队列集&#xff0c;作用&#xff1a;用于对多个队列或信号量进行“监听”&#xff0c;其中不管哪一个消息到来&#xff0c;都可…

Docker拉取并配置Grafana

Linux下安装Docker请参考&#xff1a;Linux安装Docker 安装准备 新建挂载目录 /opt/grafana/data目录&#xff0c;准备用来挂载放置grafana的数据 /opt/grafana/plugins目录&#xff0c;准备用来放置grafana的插件 /opt/grafana/config目录&#xff0c;准备用来挂载放置graf…

containerd上基于dockerfile无特权构建镜像打包工具kaniko

目录 一、kaniko是什么 二、kaniko工作原理 三、kanijo工作在Containerd上 基于serverless的考虑&#xff0c;我们选择了kaniko作为镜像打包工具&#xff0c;它是google提供了一种不需要特权就可以构建的docker镜像构建工具。 一、kaniko是什么 kaniko 是一种在容器或 Kube…

Ubuntu18.04 交叉编译curl-7.61.0

下载 官方网址是&#xff1a;curl 安装依赖库 如果需要curl支持https协议&#xff0c;需要先交叉编译 openssl,编译流程如下&#xff1a; Ubuntu18.04 交叉编译openssl-1.1.1_我是谁&#xff1f;&#xff1f;的博客-CSDN博客 解压 # 解压&#xff1a; $tar -xzvf curl-7.61.…

2023年 Java 面试八股文(25w字)

目录 一.Java 基础面试题1.Java概述Java语言有哪些特点&#xff1f;Java和C有什么关系&#xff0c;它们有什么区别&#xff1f;JVM、JRE和JDK的关系是什么&#xff1f;**什么是字节码?**采用字节码的好处是什么?Oracle JDK 和 OpenJDK 的区别是什么&#xff1f; 2.基础语法Ja…

java.lang.UnsupportedOperationException解决方法

java.lang.UnsupportedOperationException解决方法 先放错误信息业务场景报错分析先看报错代码位置进入源码查看至此 真相大白 解决方法总结 先放错误信息 业务场景 已知有学生 张三李四王五赵六 等人 private List<String> nameList Arrays.asList("张三", &…

Linux基础命令2

目录 基础命令 ln命令 grep命令 查看文本内容的五种方式 1.cat命令 2.more命令 3.less命令 4.head命令 5.tail命令 echo命令 alias命令 基础命令 ln命令 作用&#xff1a;创建链接文件 格式&#xff1a;ln 命令选项 目标文件 链接文件名 命令选项&#xff1a;-s…

jdk 03.stream

01.集合处理数据的弊端 当我们在需要对集合中的元素进行操作的时候&#xff0c;除了必需的添加&#xff0c;删除&#xff0c;获取外&#xff0c;最典型的操作就是集合遍历 package com.bobo.jdk.stream; import java.util.ArrayList; import java.util.Arrays; import java.ut…

SpringMVC拦截器介绍

1、SpringMVC拦截器 1.1 2、serlet是对目标进行干御的 3、即使路径访问成功&#xff0c;也不一定能访问的到资源&#xff0c;如果放行就能够访问到资源&#xff0c;以前只要映射关系&#xff0c;资源就能100%访问到 3.1 4、拦截器链&#xff1a;这一个个的拦截器组合到一起&…

MR混合现实实训教学系统演示

MR混合现实实训教学系统的应用场景&#xff1a; 1、汽车检测与维修 使用MR混合现实技术&#xff0c;学生可以通过虚拟头戴式设备&#xff0c;将课堂延伸到实地。例如&#xff0c;在汽车维修课程中&#xff0c;学生可以通过MR技术&#xff0c;熟悉汽车模型内部关键结构&#x…

【案例】登录注册

<template><div class"loginhome"><Header :butShow"butShow"></Header><div class"formdiv"><div style"text-align:center;padding:10px;"><h3>你好登录账号{{ stauts 3? 注册:登录 }}…

【C++】—— 简述C++11新特性

序言&#xff1a; 从本期开始&#xff0c;我将会带大家学习的是关于C11 新增的相关知识&#xff01;废话不多说&#xff0c;我们直接开始今天的学习。 目录 &#xff08;一&#xff09;C11简介 &#xff08;二&#xff09;统一的列表初始化 1、&#xff5b;&#xff5d;初始…

FreeCAD向实体填充\添加材料\镜像\制作投影

任务 在本教程中&#xff0c;您将使用零件设计工作台创建下图所示零件的 3D 实体模型。给出了完成此任务的所有必要维度。 首先从基础草图创建核心形状&#xff0c;然后在该形状的基础上进行构建&#xff0c;添加所谓的特征。 这些特征将使用附加草图和随附的特征操作向实体添…

CTFshow 限时活动 红包挑战9 详细题解

CTFshow红包挑战9 题目源码开源了。源码如下&#xff1a; common.php <?phpclass user{public $id;public $username;private $password;public function __toString(){return $this->username;}}class cookie_helper{private $secret "*************"; /…

搭建电路(最大生成树)

本文为最近做过的一道编程笔试题&#xff0c;代码实现方式多种多样&#xff0c;此处本人提供的代码可以获得正确解&#xff0c;仅供大家参考。 目录 一、题目描述二、实现代码程序三、测试结果截图 一、题目描述 题目描述&#xff1a; 明明迷上了一个搭建电路的游戏。 在游戏…