C++的使用小教程8——多态与接口

2023-11-06

C++的使用小教程8——多态与接口

学习好幸苦。
在这里插入图片描述

1、什么是多态与接口

C++ 多态意味着调用成员函数时,会根据调用函数的对象的类型来执行不同的函数。
接口描述了类的行为和功能,而不需要完成类的特定实现。
过多态与接口的配合,可以使得C++中同一个函数在派生类与基类中实现方式不同,假设我们有一个名为shape的类,circle和rectangle都是它的派生类,circle和rectangle的求面积的方式不同,如果我们可以重定义circle和rectangle的面积求取方式,那么就更合适。
此时基类提供一个接口,派生类对这个接口进行重定义,实现特定的功能。

2、实现方式

在基类中,使用如下形式实现接口的定义:

virtual double getArea() = 0;

在派生类中,使用如下形式实现多态:

// 圆形
class Circle :public Shape {
public:
	double getArea() {
		return 3.1415926*length*breadth / 4;
	}
};

要注意的是,在基类中,定义前要加上virtual,在派生类中,函数名字要相同。

3、应用实例

接下来的例子会通过多态与接口实现求取circle和rectangle不同的面积。

#include <iostream>

using namespace std;

class Shape
{
public:
	// 构造函数定义
	Shape(double l = 2.0, double b = 2.0)
	{
		length = l;
		breadth = b;
	}
	void setLength(double lengthIn) {
		length = lengthIn;
	}
	void setBreadth(double breadthIn) {
		breadth = breadthIn;
	}
	virtual double getArea() = 0;
	
protected:
	double length;     // 长度
	double breadth;    // 宽度
};

// 圆形
class Circle :public Shape {
public:
	double getArea() {
		return 3.1415926*length*breadth / 4;
	}
};

// 长方形
class Rectangle :public Shape {
public:
	double getArea() {
		return length * breadth;
	}
};

int main(void)
{	
	Circle circle;
	Rectangle rectangle;

	circle.setLength(2);
	circle.setBreadth(2);

	rectangle.setBreadth(3);
	rectangle.setLength(4);

	// 面积
	cout << "The area of circle is " << circle.getArea() << endl;
	cout << "The area of rectangle is " << rectangle.getArea() << endl;
	system("pause");
	return 0;
	
}

实现结果为:

The area of circle is 3.14159
The area of rectangle is 12
请按任意键继续. . .
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

C++的使用小教程8——多态与接口 的相关文章

随机推荐

  • linux基础(超级详细小白入门篇)

    1 基础介绍 1 1 unix 与 linux 区别 1 2 内核 Ubuntu 主要界面视图 因为窗口也是需要消耗资源的 CentOS 主要运用在服务器 linux启动时我们会看到许多启动信息 Linux 系统的启动过程并不是大家想象中的
  • 渗透初识之DVWA靶场搭建及使用(详细图文)

    目录 环境搭建 一 下载DVWA 二 安装DVWA 三 DVWA 使用 环境搭建 我将环境搭在win7 漏洞环境建议还是在虚拟机上搭建 一 下载DVWA 下载地址 Buy Steroids Online UK Anabolic Steroi
  • shell 学习记录(一)-Orange Pi Linux 5.4 SDK启动脚本build.sh

    前言 完全shell菜鸟 以Orange Pi Linux 5 4 SDK编译启动脚本build sh学习shell 对不懂的语法 命令记录 一 获取当前文件夹绝对路径 SRC dirname realpath BASH SOURCE 0
  • 带你玩转Visual Studio

    带你玩转Visual Studio 带你新建一个工程 工程目录下各文件的含义 解决方案与工程 在这之前先了解一个概念 解决方案与工程 解决方案 Solution 一个大型项目的整体的工作环境 工程 Project 一个解决方案下的一个子工程
  • 小程序中如何将页面生成图片?

    记一次开发一款小程序遇到的需求 根据用户填写的商品信息 生成一张可分享的购买海报 简单的看了一下小程序的canvas组件 是可以满足这个需求的实现 所以就开始规划 组织代码了 1 小程序组件 canvas 是可以实现的 这里我就不多说了 但
  • 英语怎么学

    我是怎么从零开始学英语的 哈哈哈 在很多人眼里 英语难 和我以前的认为一样 其实英语是最好学的一个语言 很有规则 远比我们的母语中文好学 多数不要一年 就能够过关了 但要友技巧 很多人一定会认为我晕了头 不要急 等我说完了 你再说这话也不迟
  • MySQL 利用UDF执行命令

    UDF即User Defined Functions lib mysqludf sys 在github的介绍 A UDF library with functions to interact with the operating syste
  • Openwrt-搭建一个Git服务器

    简介 对于Git文件的管理 一直是一个比较困扰的问题 目前是流行的Github是一个不错的选择 但是默认是开源的 如果是一些不愿共享出来的文件代码 我们最好是搭建一个自己的服务器 在git官方网站有git服务器的搭建方法 今天 我要说的是在
  • PYQT5表格及样式设置方法

    PYQT5遇到的问题和解决 1 给table添加样式 table 透明度设置 构造一个含图片的label 再用setCellWidget把label插入单元格 1 给table添加样式 1 qApp setStyleSheet font s
  • 《因果学习周刊》第6期:因果推荐系统

    No 06 智源社区 因果学习组 因 果 学 习 研究 观点 资源 活动 关于周刊 因果学习作为人工智能领域研究热点之一 其研究进展与成果也引发了众多关注 为帮助研究与工程人员了解该领域的相关进展和资讯 智源社区结合领域内容 撰写了第6期
  • 【GeekUninstaller】卸载程序

    软件介绍 删除不了的文件 或者软件可以下载试试不需要安装 文章目录 前言 一 如何下载 二 使用步骤 1 安装完之后自动打开 前言 GeekUninstallers是一款高效 快速 小巧 免费的软件卸载与清理工具 旨在帮助用户删除系统上安装
  • caffe源码追踪--syncedmem

    首先来看看caffe include caffe syncedmem hpp ifndef CAFFE SYNCEDMEM HPP define CAFFE SYNCEDMEM HPP include
  • 深度学习之 python pandas

    在数据科学领域 pandas是非常有用的工具 在数据科学细分领域大数据 通常和深度学习有关 这部分 本篇博客从pandas重要函数开始 到数据变换以及数据分析 pandas提供了数据变换 数据清理 数据可视化以及数据提取等主要数据处理功能
  • tar -xf_linux 解压缩命令tar

    linux环境下常见的压缩文件格式 tar tar gz tar bz2 tar xz 参数 c create create a new archive 创建文件 x extract get extract files from an ar
  • 静态资源上传七牛云

    一 七牛云SDK function 请参考demo的index js中的initQiniu 方法 若在使用处对options进行了赋值 则此处config不需要赋默认值 init options 即updateConfigWithOptio
  • Python爬虫实战(五) :下载百度贴吧帖子里的所有图片

    准备工作 目标网址 https tieba baidu com p 5113603072 目的 下载该页面上的所有楼层里的照片 第一步 分析网页源码 火狐浏览器 gt 在该页面上右击 查看页面源代码 会打开一个新的标签页 第二步 查找图片源
  • ue4蓝图中的customevent和function的细微差别。

    在调用第三方库时 我用customEvent时 可以调用LowEntryHttpRequest中的 Executes the request This blueprint can NOT execute several HTTP Reque
  • 记录一下浏览器缩放和移动端缩放的区别,其实两者是有很大的不同的,之前一直搞不明白。

    直接问AI它们之间的区别的话 是这么回答的 浏览器缩放和移动端缩放是两种不同的概念 它们涉及到用户在不同设备上改变网页内容大小的方式 以下是它们的主要区别 浏览器缩放 Desktop Browser Zoom 浏览器缩放是指在桌面计算机浏览
  • 以太坊学习计划1

    1 如果链接远程链 需要上链才可以 打开服务才可以 2 开启本地geth 服务 下载https geth ethereum org downloads 默认启动geth服务 不启动rpc服务 手动用命令行启动 geth rpc 代码端调用
  • C++的使用小教程8——多态与接口

    C 的使用小教程8 多态与接口 1 什么是多态与接口 2 实现方式 3 应用实例 学习好幸苦 1 什么是多态与接口 C 多态意味着调用成员函数时 会根据调用函数的对象的类型来执行不同的函数 接口描述了类的行为和功能 而不需要完成类的特定实现