当前位置: 首页 > news >正文

valarray 包含对象成员的类(cpp14章)

C++代码重用   

1.公有继承可以实现 

2.包含、私有继承、保护继承用于实现has-a关系,即新的类将包含另一个类的对象

(使用这样类成员:本身是另外一个类对象称为包含 (组合或层次化)。)

3.函数模板、类模板

valarray类构造函数举例 

double gap[5] = { 3.1,3.5,3.8,2.9,3.3 };
valarray<double> v1;   //创建1个double类型的空数组
valarray<int> v2(8);   //创建8个int类型数组
valarray<int> v3(10,8); //创建8个int类型数组,数组中每个数都是10
valarray<double> v4(gap,4);//取出gap数组的前四个元素用于填充v4数组
valarray<int> v5 = { 20,32,17,9 };//C++ 11中

类方法举例:

operator[]() : 访问各个元素
size() : 返回包含的元素数
sum() : 返回所有元素的总和
max() : 返回最大的元素
min(): 返回最小的元素

举例:每个学生的录入考试成绩  (has_a关系,学生有姓名,也有一组考试成绩)

        用string对象表示学生的名字,valarray<double>表示考试的分数

       将其声明为私有,意味着Valarray类的成员函数可以使用string和valarray<double>类的公有接口来访问和修改name和scores对象。但类外不可这么做,只能通过Valarray类的公有接口访问name和scores。通常被描述为:Valarray类获得了其成员对象的实现,但没有继承接口。

代码:

valarray.h

#ifndef VALARRAY_H_
#define VALARRAY_H_
#include <iostream>
#include <string>
#include <valarray>
using namespace std;//14章  14.1 valarray包含成员对象的类
class Student
{
private:typedef valarray<double> ArrayDb;string name;ArrayDb scores;//valarray<double> ArrayDb 
public:Student():name("Null student"),scores(){} //成员初始化列表explicit Student(const string&s):name(s), scores() {}  //explicit关闭隐式转换,使其只能显调用explicit Student(int n) :name("Nully"), scores(n) {}Student(const string&s,int n) :name(s), scores(n) {}Student(const string&s, const ArrayDb &a) :name(s), scores(a) {}Student(const string&s, const double *pd,int n) :name(s), scores(pd,n) {}~Student(){}double Average() const; //平均成绩 不可修改const string &Name() const;double &operator[](int n); //stu[0]=100;double operator[](int n) const;//a=stu[0]friend istream &operator >>(istream &is, Student &stu);//友元函数重载输入输出运算符friend istream &getline(istream &is, Student &stu);friend ostream &operator<<(ostream &os, Student &stu);
};#endif // !VALARRAY_H_

valarray.cpp

#include "valarray.h"double Student::Average() const
{if (scores.size() > 0)return  scores.sum() / scores.size();elsereturn 0.0;
}const string & Student::Name() const
{return name;
}double & Student::operator[](int n)
{return scores[n];
}double Student::operator[](int n) const
{return scores[n];
}istream & operator>>(istream & is, Student & stu)
{is >> stu.name;return is;
}istream & getline(istream & is, Student & stu)
{getline(is, stu.name);return is;
}ostream & operator<<(ostream & os, Student & stu)
{os << "Scores for" << stu.name << ":" << endl;//显示学生的姓名和各科分数int i;int lim = stu.scores.size();if (lim > 0){for ( i = 0; i < lim; i++){os << stu.scores[i] << " ";if (i % 5 == 4)os << endl;}if (i % 5 != 0)os << endl;}elseos << "Empty array" << endl;return os;}

main.cpp

#include <iostream>
#include "valarray.h"using namespace std;
const int pupils = 3; //人数
const int quizzes = 5;//每个人都有5门成绩
void set(Student &sa, int n);
int main()
{Student ada[pupils] = { Student(quizzes),Student(quizzes) ,Student(quizzes) };int i;for (i = 0; i < pupils; i++)set(ada[i], quizzes);cout << "\n Student List:" << endl;for (i = 0; i < pupils; i++)cout << ada[i].Name() << endl;//显示每个学生的姓名cout << "\n Result List:" << endl;for (i = 0; i < pupils; i++)cout << ada[i];cout << "Average:" << ada[i].Average() << endl;return 0;
}void set(Student &sa, int n)
{cout << "Please enter the student's name:";getline(cin, sa);cout << "Please enter:" << n << "quiz scores:" << endl;for (int i = 0; i < n; i++)cin >> sa[i];while (cin.get() != '\n');
}

运行结果:

相关文章:

valarray 包含对象成员的类(cpp14章)

C代码重用 1.公有继承可以实现 2.包含、私有继承、保护继承用于实现has-a关系&#xff0c;即新的类将包含另一个类的对象。 &#xff08;使用这样类成员&#xff1a;本身是另外一个类对象称为包含 &#xff08;组合或层次化&#xff09;。&#xff09; 3.函数模板、类模…...

2023双11笔记本电脑候选名单(截止2023.10.13的价格,双十一活动可能会更便宜一点)

以下是我最近几天查阅抖音,B站,知乎,百度,朋友后候选出来的一些6000-8000的游戏本电脑,标绿的属性是相比之下较为优秀的 附上几个网上的CPU和显卡排行网站 CPU性能排行榜 - CPU天梯图 - 最强CPU2023(较为全面的CPU排行,收录四千多款) 笔记本性能排行榜 - 快科技天梯榜 笔记本CP…...

Springcloud笔记(4)-客户端负载均衡Ribbon

Ribbon是一个基于HTTP和TCP的客户端负载均衡工具&#xff0c;不需要独立部署&#xff0c;几乎存在于每一个springcloud构建的微服务和基础设施中。 微服务间调用&#xff0c;API网关的请求转发都通过Ribbon实现。 负载均衡 通常所说的负载均衡都是指的服务端负载均衡&#xf…...

MediaRecorder媒体录音机

权限&#xff1a; <uses-permission android:name"android.permission.RECORD_AUDIO"/> <uses-permission android:name"android.permission.WRITE_EXTERNAL_STORAGE"/> <uses-permission android:name"android.permission.READ_EXTE…...

短视频如何批量添加水印

在当今的数字时代&#xff0c;短视频已经成为一种非常流行的内容形式。无论是社交媒体还是视频分享网站&#xff0c;短视频都已经成为了一种非常有吸引力的内容。然而&#xff0c;对于一些拥有大量视频内容的创作者来说&#xff0c;添加水印可能是一项繁琐的任务。本文将介绍如…...

RT-Thread MQTT(学习)

MQTT背景应用 MQTT是机器对机器&#xff08;M2M&#xff09;/物联网&#xff08;IoT&#xff09;连接协议&#xff0c;英文全名为“Message Queuing Telemetry Transport”&#xff0c;“消息队列遥测传输”协议。它是专为受限设备和低带宽、高延迟或不可靠的网络而设计的&…...

Vue_Bug VUE-ELEMENT-ADMIN默认是英文模式

Bug描述&#xff1a; VUE-ADMIN-TEMPLATE-MASTER VUE-ELEMENT-ADMIN-MASTER 两个项目直接从GitHub上拉取下来 默认是英文模式 其他信息&#xff1a; 这两个项目默认支持中文语言包&#xff0c;无需额外引入&#xff0c;只需删除英文语言包依赖 //import enLang from element-…...

Spark中的Driver、Executor、Stage、TaskSet、DAGScheduler等介绍

工作流程&#xff1a; Driver 创建 SparkSession 并将应用程序转化为执行计划&#xff0c;将作业划分为多个 Stage&#xff0c;并创建相应的 TaskSet。Driver 将 TaskSet 发送给 TaskScheduler 进行调度和执行。TaskScheduler 根据资源情况将任务分发给可用的 Executor 进程执…...

docker的资源限制参数设置错误,导致的clickhouse性能瓶颈

使用场景 我们使用docker作为服务的虚拟化工具&#xff0c;服务都部署在docker里我们使用docker-compose管理所有docker服务的配置文件针对某些服务&#xff0c;我们要限制这个docker占用的资源数量&#xff0c;例如&#xff0c;cpu和内存在进行配置时&#xff0c;网上搜了一些…...

Vue路由守卫有哪些,怎么设置,有哪些使用场景?

Vue 路由守卫是在 Vue Router 中提供的一种功能&#xff0c;它允许您在导航到某个路由前、路由变化时或导航离开某个路由时执行代码。Vue 路由守卫提供了以下几种类型&#xff1a; 1.全局前置守卫 router.beforeEach 在进入路由前执行的钩子函数&#xff0c;它会接收三个参数&a…...

云原生网关可观测性综合实践

作者&#xff1a;钰诚 可观测性 可观测性&#xff08;Observability&#xff09;是指系统、应用程序或服务的运行状态、性能和行为能够被有效地监测、理解和调试的能力。 随着系统架构从单体架构到集群架构再到微服务架构的演进&#xff0c;业务越来越庞大&#xff0c;也越来…...

vue-element-admin—登录页面添加自定义背景

一、效果图 初始效果&#xff1a; 更改背景后效果&#xff1a; 二、操作步骤 1、准备图片 2、更改代码 打开下面路径的 index.vue 文件&#xff1a; vue-element-admin-master\src\views\login\index.vue 也就是登录页面。 对 .login-container 样式代码块内代码做如下…...

软设上午题-错题知识点一

软设上午题-错题知识点一 1、ipconfig 显示信息&#xff1b; ipconfig /all 显示详细信息 &#xff0c;可查看DHCP服务是否已启用&#xff1b; ipconfig /renew 更新所有适配器&#xff1b; ipconfig /release 释放所有匹配的连接。 2、耦合性也叫块间联系。指软件系统结构中各…...

微信小程序(小程序入门)

一&#xff0c;介绍 1、什么是小程序 小程序是一种轻量级的应用程序&#xff0c;可以在移动设备上运行&#xff0c;不需要用户下载和安装。它们通常由企业或开发者开发&#xff0c;用于提供特定功能或服务。 微信小程序&#xff08;wei xin xiao cheng xu&#xff09;&#xf…...

虹科分享 | 想买车无忧?AR为您带来全新体验!

新能源汽车的蓬勃发展&#xff0c;推动着汽车行业加速进行数字化变革。据数据显示&#xff0c;全球新能源汽车销售额持续上升&#xff0c;预计到2025年&#xff0c;新能源汽车市场规模将达到约 4200亿美元&#xff0c;年复合增长率超过 30%。这表明消费者对清洁能源出行的需求不…...

easyUI重新渲染

问题 使用Easyui 时&#xff0c;动态后添加的元素样式无法生效。 解决颁发 全页面重新渲染 $.parser.parse();单一元素重新渲染 var obj $("#div1").append("<input classeasyui-textbox typetext>"); $.parser.parse(obj);...

html和css基础练习

vscode快捷键 alt b 在浏览器中打开 alt shift b 在其他浏览器打开 ctrl / 注释 ctrl y 快捷键删除 参考文章 https://www.bilibili.com/video/BV1m84y1w7Tb 基础html标签 img&#xff1a;图像&#xff0c;title&#xff1a;头部文字&#xff0c;body&#xff1a;主…...

Linux信号 signal()编程

在Linux的进程间通信中可以用signal&#xff08;&#xff09;函数进行信号与信息传递。 1.信号 信号的名字和编号&#xff1a; 每个信号都有一个名字和编号&#xff0c;这些名字都以“SIG”开头&#xff0c;例如“SIGIO ”、“SIGCHLD”等等。 信号定义在signal.h头文件中&am…...

【LeetCode】16.最接近的三数之和

1 问题 给你一个长度为 n 的整数数组 nums 和 一个目标值 target。请你从 nums 中选出三个整数&#xff0c;使它们的和与 target 最接近。 返回这三个数的和。 假定每组输入只存在恰好一个解。 示例 1&#xff1a; 输入&#xff1a;nums [-1,2,1,-4], target 1 输出&…...

嵌入式开发学习之STM32F407点亮LED及J-Link下载(二)

嵌入式开发学习之STM32F407点亮LED及J-Link下载&#xff08;二&#xff09; 开发涉及工具控制端口配置端口的设定与确认端口配置方法实现点亮LED程序下载与仿真 有工程实例&#xff0c;链接在最底部。 开发涉及工具 开发环境&#xff08;IDE&#xff09;&#xff1a;IAR-ARM8…...

重塑Word排版效率——多级列表与自动编号的进阶应用

1. 为什么你的Word文档总是排版混乱&#xff1f; 每次打开同事发来的Word文档&#xff0c;最让我头疼的就是那些乱七八糟的编号格式。明明应该是"1.1"的子标题&#xff0c;突然变成了"5.3"&#xff1b;精心调整的缩进距离&#xff0c;传到别人电脑上就完全…...

反激变压器优化设计实战:从磁芯选型到绕制工艺的工程指南

1. 项目概述&#xff1a;为什么反激变压器设计是开关电源的“心脏手术”&#xff1f; 在开关电源的世界里&#xff0c;反激拓扑&#xff08;Flyback&#xff09;就像一位“全能型选手”&#xff0c;从手机充电器到家电辅助电源&#xff0c;再到工业控制模块&#xff0c;几乎无处…...

倒置百分比堆叠面积图表示列详解|Highcharts大气成分图表代码

这是一个基于 Highcharts 实现的水平面积曲线图&#xff08;areaspline 倒置坐标系&#xff09;&#xff0c;专门用于展示不同高度下地球大气成分的体积占比变化&#xff0c;是典型的百分比堆叠面积图&#xff0c;数据直观反映了大气层随高度升高的成分分布规律。我会从图表结…...

设计程序统计城市社区医疗站点接诊数据,优化医疗点位分布,方便居民就近看病,解决就医难问题。

一、实际应用场景描述某城市卫健委希望优化社区卫生服务中心布局&#xff0c;但面临以下现实情况&#xff1a;- 各社区接诊量差异巨大- 部分点位长期排队&#xff0c;部分点位资源闲置- 居民跨区就医成本高- 缺乏基于数据的点位调整依据&#x1f449; 技术目标&#xff1a;用 P…...

如何快速部署FastGithub:终极GitHub加速配置指南

如何快速部署FastGithub&#xff1a;终极GitHub加速配置指南 【免费下载链接】FastGithub github定制版的dns服务&#xff0c;解析访问github最快的ip 项目地址: https://gitcode.com/gh_mirrors/fa/FastGithub FastGithub是一款专为开发者设计的智能DNS加速工具&#x…...

OpenClaw与企业微信联动:自动发送工作通知、统计员工回复情况,简化管理流程

OpenClaw 赋能企业微信&#xff1a;构建智能高效的自动化管理新范式在数字化转型浪潮席卷各行各业的当下&#xff0c;企业对于内部流程优化、管理效率提升以及员工协作体验改善的需求日益迫切。传统的管理方式&#xff0c;如手动发送通知、人工统计反馈、层层审批流转等&#x…...

Mission Planner地面站保姆级教程:给Pixhawk刷固件、校准传感器到成功解锁起飞

Mission Planner地面站全流程实战&#xff1a;从固件刷写到安全起飞的终极指南 当第一次拿到Pixhawk飞控时&#xff0c;许多爱好者都会面临同样的困惑——如何将这块电路板变成可靠的飞行大脑&#xff1f;本文将用工程师视角拆解整个配置流程&#xff0c;分享那些官方手册没写清…...

【MATLAB】基于MATLAB的图像加密传输平台【GUI+源码+项目说明】

【MATLAB】基于MATLAB的图像加密传输平台【GUI源码项目说明】 一、项目介绍 数字图像具有数据量大、像素间相关性强、视觉冗余度高的特点, 传统的字节级加密 (如 AES) 直接作用于图像比特流虽能保密, 但无法破坏图像在空间域的统计特征. 本项目采用 “Arnold 置乱 明文相关 Lo…...

2位相位可重构天线设计与波束控制技术解析

1. 2位相位可重构天线技术概述相位可重构天线作为现代无线通信系统的关键组件&#xff0c;其核心价值在于能够动态调整辐射波束的方向和形状。这种能力使其成为5G/6G通信、雷达系统和卫星通信等场景中的理想选择。2位相位可重构天线通过4种离散相位状态&#xff08;00、01、10、…...

Pixelle-Video完整指南:如何用AI在3分钟内创建专业短视频

Pixelle-Video完整指南&#xff1a;如何用AI在3分钟内创建专业短视频 【免费下载链接】Pixelle-Video &#x1f680; AI 全自动短视频引擎 | AI Fully Automated Short Video Engine 项目地址: https://gitcode.com/GitHub_Trending/pi/Pixelle-Video 在当今内容爆炸的时…...