【C++】——多态性与模板(其二)

news2024/10/6 22:23:12

🎃个人专栏:

🐬 算法设计与分析:算法设计与分析_IT闫的博客-CSDN博客

🐳Java基础:Java基础_IT闫的博客-CSDN博客

🐋c语言:c语言_IT闫的博客-CSDN博客

🐟MySQL:数据结构_IT闫的博客-CSDN博客

🐠数据结构:​​​​​​数据结构_IT闫的博客-CSDN博客

💎C++:C++_IT闫的博客-CSDN博客

🥽C51单片机:C51单片机(STC89C516)_IT闫的博客-CSDN博客

💻基于HTML5的网页设计及应用:基于HTML5的网页设计及应用_IT闫的博客-CSDN博客​​​​​​

🥏python:python_IT闫的博客-CSDN博客

🐠离散数学:离散数学_IT闫的博客-CSDN博客

欢迎收看,希望对大家有用!

🎯问题一

给出下面的抽象基类container;要求建立2个继承container的派生类Sphere与Cylinder,每一个派生类都包含虚函数surface_area()和 volume(),分别用来计算球体和圆柱体的表面积及体积。写出主程序,应用C++的多态性,分别计算半径为5.0的球体以及半径为5.0和高为6.0的圆柱体的表面积和体积。🎯问题一

🎯问题二

已知一个有若干元素的数组arr,使用函数模板求该数组的的最大值,主函数定义数组,使用模板函数求最大值并输出。

🎯问题三

编写一个类模板对数组元素进行遍历输出、数组求和等,主函数创建数组类对象,调用函数遍历输出及求和。

🎯答案一 

#include <iostream>

using namespace std;

class Container {    //声明抽象类container

protected:

double  radius;

public:

Container(double _radius) { //抽象类container的构造函数

radius=_radius;

}

virtual double surface_area()=0; //纯虚函数surface_area

virtual double volume()=0;       //纯虚函数volume

};

/****************************************************/

//派生类sphere  pi=3.14159   s=4*pi*r*r   v=4/3*pi*r*r*r

class Sphere:public Container {

public:

Sphere(double _radius);

double surface_area();

double volume();

};

Sphere::Sphere(double _radius):Container(_radius) {

}

double Sphere::surface_area() {

//s=4*pi*r*r

return 4*3.14159*radius*radius;

}

double Sphere::volume() {

//v=4/3*pi*r*r*r

return 4.0/3*3.14159*radius*radius*radius;

}

/****************************************************/

//派生类Cylinder

class Cylinder:public Container {

public:

Cylinder(double _radius,double _height);

double surface_area();

double volume();

private:

double height;

};

Cylinder::Cylinder(double _radius,double _height):Container(_radius) {

height=_height;

}

double Cylinder::surface_area() {

return 2*3.14159*radius*height+2*3.14159*radius*radius;

}

double Cylinder::volume() {



return 3.14159*radius*radius*height;;

}

int main() {

Sphere sphere(2);

cout<<"球体表面积:"<<sphere.surface_area()<<endl;

cout<<"球体体积:"<<sphere.volume()<<endl;

Cylinder Cylinder(2,3);

cout<<"圆柱体表面积:"<<Cylinder.surface_area()<<endl;

cout<<"圆柱体体积:"<<Cylinder.volume()<<endl;

}



🎯答案二

#include <iostream>

using namespace std;

/****************************************************/

//函数模板max_arr 

template <class T>

T max_arr(T arr[],int n) {

T max=arr[0];

for(int i=1; i<n; i++)

if(max<arr[i])

max=arr[i];

return max;

}

/****************************************************/

int main() {

  int a[5],k;

  for(k=0;k<5;k++)

    cin>>a[k];

  cout<<"max="<<max_arr<int>(a,5)<<endl;



}



🎯答案三

#include <iostream>

using namespace std;

template<class T>  //类模板

class Array {

private:

int _size;

T* _ptr;

public:

Array(T arr[], int s);

void show();

T sum();

};

//构造函数

template<class T>

Array<T>::Array(T arr[], int s) {

_ptr = new T[s];

_size = s;

for (int i=0; i<_size; i++) {

_ptr[i]=arr[i];

}

}

//遍历输出函数

template<class T>

void Array<T>::show() {

for (int i=0; i<_size; i++)

cout<<*(_ptr + i)<<" ";

cout<<endl;

}

/****************************************************/

//求和函数

template<class T>

T Array<T>::sum() {

T s=0;

for (int i=0; i<_size; i++)

s=s+*(_ptr + i);

return s;

}

/****************************************************/

int main() {

int iArr[6] = { 2, 1, 3, 5, 4, 6 };

Array<int> a1(iArr, 6);

a1.show();

cout<<"sum="<<a1.sum()<<endl;

return 0;

}

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

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

相关文章

人工智能带来的各方面影响

近年来&#xff0c;人工智能&#xff08;AI&#xff09;技术在各个领域中的应用越来越广泛&#xff0c;已经开始对我们的生活方式、社会和经济结构产生深远的影响。 1.人工智能家庭化。人工智能技术使我们的生活变得更加便利和智能化。在家庭日常中&#xff0c;智能家居、智能…

二百零七、Flume——Flume实时采集5分钟频率的Kafka数据直接写入ODS层表的HDFS文件路径下

一、目的 在离线数仓中&#xff0c;需要用Flume去采集Kafka中的数据&#xff0c;然后写入HDFS中。 由于每种数据类型的频率、数据大小、数据规模不同&#xff0c;因此每种数据的采集需要不同的Flume配置文件。玩了几天Flume&#xff0c;感觉Flume的使用难点就是配置文件 二、…

图像处理02 matlab中NSCT的使用

06 matlab中NSCT的使用 最近在学习NSCT相关内容&#xff0c;奈何网上资源太少&#xff0c;简单看了些论文找了一些帖子才懂了一点点&#xff0c;在此分享给大家&#xff0c;希望有所帮助。 一.NSCT流程 首先我们先梳理一下NSCT变换的流程&#xff0c;只有清楚流程才更好的理清…

一文详看大模型长文本如何评估:四大主流评测数据集的任务设计、数据集构建方案

大语言模型&#xff08;LLM&#xff09;尽管在各种语言任务中表现抢眼&#xff0c;但通常仅限于处理上下文窗口大小范围内的文本。 有越来越多的基准被提出来测试LLM的长文本理解能力。 当前具有代表性的长文本评测主要包括Zero-SCROLLS、L-Eval、LongBench以及loogle四个基准…

万字解析设计模式之 装饰者模式

一、装饰者模式 1.1概述 装饰者模式是一种结构型设计模式&#xff0c;它允许在运行时动态地为一个对象添加额外的职责。它以一种透明的方式来扩展对象的功能&#xff0c;而不需要通过子类来实现。在装饰者模式中&#xff0c;有一个基本对象&#xff0c;也称为组件&#xff0c;…

如何给面试官解释什么是分布式和集群?

分布式&#xff08;distributed&#xff09; 是指在多台不同的服务器中部署不同的服务模块&#xff0c;通过远程调用协同工作&#xff0c;对外提供服务。 集群&#xff08;cluster&#xff09; 是指在多台不同的服务器中部署相同应用或服务模块&#xff0c;构成一个集群&#…

你真的了解 Cookie 和 Session 吗?

文章目录 Cookie 和 Session总结 Cookie 和 Session cookie HTTP cookie&#xff08;web cookie、browser cookie&#xff09;是服务器发送给用户 web 浏览器的一小段数据。浏览器可能会存储 cookie&#xff0c;并在以后的请求中将其发送回同一台服务器。通常&#xff0c;HTTP …

数据库中的undo与redo的作用

undo与redo的作用 ​专栏内容&#xff1a; 手写数据库toadb 本专栏主要介绍如何从零开发&#xff0c;开发的步骤&#xff0c;以及开发过程中的涉及的原理&#xff0c;遇到的问题等&#xff0c;让大家能跟上并且可以一起开发&#xff0c;让每个需要的人成为参与者。 本专栏会定期…

Git - 版本控制系统

一、概述 git是一个免费开源&#xff0c;分布式的代码版本控制系统&#xff0c;帮助开发团队维护代码。作用是记录代码内容&#xff0c;切换代码版本&#xff0c;多人开发时高效合并代码内容。 直接安装git&#xff0c;默认下一步&#xff0c;然后就能在VScode中看到git控制台 …

YOLOv8更换骨干网络HorNet:递归门控卷积的高效高阶空间交互——涨点神器!

🗝️YOLOv8实战宝典--星级指南:从入门到精通,您不可错过的技巧   -- 聚焦于YOLO的 最新版本, 对颈部网络改进、添加局部注意力、增加检测头部,实测涨点 💡 深入浅出YOLOv8:我的专业笔记与技术总结   -- YOLOv8轻松上手, 适用技术小白,文章代码齐全,仅需 …

海康威视监控相机的SDK与opencv调用(非工业相机)

1.研究内容 本篇主要对海康威视的监控相机的SDK回调进行研究&#xff0c;并于opencv结合&#xff0c;保存图像,以供后续其他处理&#xff0c;开发语言为C 2.步骤及方法 2.1 海康SDK介绍 海康SDK下载地址 根据自身编译环境&#xff0c;下载对应的SDK&#xff0c;需要注意的是…

rotation matrix reflection matrix

文章目录 1. rotation matrix1.1 结论 2. reflection matrix2.1 结论 1. rotation matrix 图像逆时针旋转 θ \theta θ的矩阵 Q r o t a t e [ cos ⁡ θ − sin ⁡ θ sin ⁡ θ cos ⁡ θ ] (1) Q_{rotate}\begin{bmatrix}\cos\theta&-\sin\theta\\\sin\theta&\c…

LOJ #10134. 「一本通 4.4 练习 1」Dis

分析 根据数据范围分析一下复杂度&#xff0c;Floyd和dj算法都必爆。 发现题目说的是树&#xff0c;还是边还是双向的&#xff08;树本身就是无向的&#xff0c;连通无回路的无向图叫做无向树&#xff0c;简称树。如果题目说了树&#xff0c;那么默认边就是双向的&#xff09…

腾讯云服务器标准型S5实例CPU性能如何?配置特性说明

腾讯云服务器CVM标准型S5实例具有稳定的计算性能&#xff0c;CVM 2核2G S5活动优惠价格280.8元一年自带1M带宽&#xff0c;15个月313.2元、2核4G配置748.2元15个月&#xff0c;CPU内存配置还可以选择4核8G、8核16G等配置&#xff0c;公网带宽可选1M、3M、5M或10M&#xff0c;腾…

uniapp和vue3+ts创建自定义下拉选择框组件

使用uniapp开发小程序的时候&#xff0c;使用了uview的ui组件&#xff0c;但是里面没有下拉选择组件&#xff0c;只有Picker 选择器&#xff0c;但是我们想要使用下拉选择的组件&#xff0c;所以需要自定义个一个下拉选择的自定义组件&#xff0c;我就只能自己动手创建这个自定…

公网环境固定域名异地远程访问内网BUG管理系统

文章目录 前言1. 本地安装配置BUG管理系统2. 内网穿透2.1 安装cpolar内网穿透2.2 创建隧道映射本地服务3. 测试公网远程访问4. 配置固定二级子域名4.1 保留一个二级子域名5.1 配置二级子域名6. 使用固定二级子域名远程 前言 BUG管理软件,作为软件测试工程师的必备工具之一。在…

【OpenGauss源码学习 —— 列存储(ColumnTableSample)】

执行算子&#xff08;ColumnTableSample&#xff09; 概述ColumnTableSample 类ColumnTableSample::ColumnTableSample 构造函数ColumnTableSample::~ColumnTableSample 析构函数ExecCStoreScan 函数ColumnTableSample::scanVecSample 函数ColumnTableSample::getMaxOffset 函数…

前端实现移动端Tab栏(附带源码)

文章目录 先上图,附带源码index.html 主要视图层Main.css 主要样式demo.css主要的JS,在index.html 引入即可先上图,附带源码 提示:一款JS和CSS3炫酷Tabbar导航栏动画特效。该Tabbar导航栏在点击切换时,会有类似波浪运动的动画效果,非常炫酷。 index.html 主要视图层 &l…

Hadoop-- hdfs

1、HDFS中的三个进程&#xff1a;NameNode&#xff08;NN&#xff09;、DataNode(DN)、SecondNameNode(SNN) 2、NameNode&#xff08;NN&#xff09; 1、作用&#xff1a; 1、接收客户端的一个读、写的服务&#xff0c;在namenode上存储了数据文件和datanode的映射的关系。 …

Python实现WOA智能鲸鱼优化算法优化随机森林回归模型(RandomForestRegressor算法)项目实战

说明&#xff1a;这是一个机器学习实战项目&#xff08;附带数据代码文档视频讲解&#xff09;&#xff0c;如需数据代码文档视频讲解可以直接到文章最后获取。 1.项目背景 鲸鱼优化算法 (whale optimization algorithm,WOA)是 2016 年由澳大利亚格里菲斯大学的Mirjalili 等提…