10.2 继承与多态

news/2025/3/10 18:50:14/

文章目录

继承

在这里插入图片描述
继承的作用是代码复用。派生类自动获得基类的除私有成员外的一切。基类描述一般特性,派生类提供更丰富的属性和行为。在构造派生类时,其基类构造函数先被调用,然后是派生类构造函数。在析构时顺序刚好相反。

// 基类 LinearList
class LinearList{int *buffer;int size;
public:LinearList(int num){size = (num>10)?num:10;buffer = new int[size];}~LinearList(){delete []buffer;}bool insert(int x, int i);  // 线性表第i个元素后插入新元素,返回成功或失败bool remove(int &x, int i); // 删除线性表第i个元素,返回成功或失败int element(int i) const; // 返回线性表第i个元素, const表示不会修改调用它的对象的任何非静态成员数据int search(int x) const; // 查找值为x的元素并返回其序号int length() const; //返回线性表的长度
};
// 派生类 Queue
class Queue:private LinearList{  // 基类的公有和保护成员均变成派生类的私有成员
public:bool enQueue(int x){  // 元素x入队,返回操作成功或失败return insert(x, length());}bool deQueue(int &x){  // 元素出队, x带回队头元素return remove(x, 1);}
};
// 派生类 Stack
class Stack:private LinearList{
public:bool push(int x){  // 元素x入栈,返回操作成功或失败return insert(x, 1); }bool pop(int &x){  // 元素出栈,x带回栈顶元素return remove(x, 1);}
};

多态

在这里插入图片描述
多态的作用是使用一个接口调用多种方法,具体调用哪个函数,是在程序运行时决定的。实现多态,需要在派生类中定义与基类成员函数完全相同的方法签名(返回值、函数名、形参都完全一样)。作用在普通成员函数上,称为重置或覆盖。作用在虚成员函数上,称为实现。虚函数的前面都有virtual关键字,纯虚函数名末尾还有"=0"的标记,纯虚函数仅有定义,没有函数实现,当作接口使用。含有纯虚函数的类称为抽象类,不能创建对象,只能被继承。只有类的成员函数才能是虚函数,静态成员函数不能是虚函数,构造函数不能是虚函数,析构函数可以是虚函数。

#include <iostream>
#include <math.h>
// 基类
class Figure{
public:virtual double getArea() = 0; // 纯虚函数
}; // 千万不要忘记这个分号
// 派生类 Rectangle
class Rectangle:public Figure{
protected:double height;double width;
public:Rectangle(){}Rectangle(double height, double width){this->height = height;this->width = width;}double getArea(){return height*width;}
};
// 派生类 Triangle
class Triangle:public Figure{double la;double lb;double lc;
public:Triangle(double la, double lb, double lc){this->la = la;this->lb = lb;this->lc = lc;}double getArea(){double s = (la+lb+lc)/2.0;return sqrt(s*(s-la)*(s-lb)*(s-lc));}
};
// 主函数
void main(){Figure *figures[2] = {new Triangle(2,3,3), new Rectangle(5,8)};for(int i=0; i<2; i++){std::cout << "figures[" << i << "] area=" << figures[i]->getArea() << std::endl;delete figures[i];}
}

http://www.ppmy.cn/news/1578152.html

相关文章

Unity DOTS从入门到精通之 自定义Authoring类

文章目录 前言安装 DOTS 包什么是Authoring1. 实体组件2. Authoring类 前言 DOTS&#xff08;面向数据的技术堆栈&#xff09;是一套由 Unity 提供支持的技术&#xff0c;用于提供高性能游戏开发解决方案&#xff0c;特别适合需要处理大量数据的游戏&#xff0c;例如大型开放世…

关于VScode终端无法识别外部命令

之前使用VScode内置的终端来管理Python包以及现在要使用到node.js&#xff0c;都遇到了终端无法识别外部命令的情况。可能是以下原因之一吧&#xff0c;今天汇总一下。 1.cmd和powershell 我使用的是cmd&#xff0c;不知道powershell怎么样。 设置之后要新建终端&#xff0c;…

pytorch retain_grad vs requires_grad

requires_grad大家都挺熟悉的&#xff0c;因此穿插在retain_grad的例子里进行捎带讲解就行。下面看一个代码片段&#xff1a; import torch# 创建一个标量 tensor&#xff0c;并开启梯度计算 x torch.tensor(2.0, requires_gradTrue)# 中间计算&#xff1a;y 依赖于 x&#x…

sysbench手动测试OceanBase v4.2.4集群

环境&#xff1a; 1、ocp&#xff08;sysbench节点&#xff09; 192.192.103.128 2、ob集群1-1-1 observer 192.192.103.125、192.192.103.126、192.192.103.127&#xff0c;primary_zone:random haproxy 192.192.103.125、192.192.103.126、192.192.103.127 一、安装sysben…

uniapp版本加密货币行情应用

uniapp版本加密货币行情应用 项目概述 这是一个使用uniapp开发的鸿蒙原生应用&#xff0c;提供加密货币的实时行情查询功能。本应用旨在为用户提供便捷、实时的加密货币市场信息&#xff0c;帮助用户随时了解市场动态&#xff0c;做出明智的投资决策。 应用采用轻量级设计&a…

使用QT + 文件IO + 鼠标拖拽事件 + 线程 ,实现大文件的传输

第一题、使用qss&#xff0c;通过线程&#xff0c;使进度条自己动起来 mythread.h #ifndef MYTHREAD_H #define MYTHREAD_H#include <QObject> #include <QThread> #include <QDebug>class mythread : public QThread {Q_OBJECT public:mythread(QObject* …

Xenium数据分析 | 下机数据读取

今天我们将下载10x官方人肺癌FFPE样本Xenium5k下机数据&#xff0c;使用python的spatialdata库&#xff0c;演示如何进行Xenium单个样本/多样本数据读取&#xff0c;以及简单绘图功能展示。 1. 示例数据下载&#xff1a; 数据下载地址: https://www.10xgenomics.com/datasets…

关于Springboot 应配置外移和Maven个性化打包一些做法

期望达到的效果是每次更新服务器端应用只需要更新主程序jar 依赖jar单独分离。配置文件独立存放于文件夹内&#xff0c;更新程序并不会覆盖已有的配置信息。 一、配置外移 1、开发环境外移 做法&#xff1a;在项目同级或者上级创建config文件夹放置配置文件&#xff0c;具体m…