C++Primer Plus 第十四章代码重用:编程练习,第一题

C++Primer Plus 第十四章代码重用:编程练习,第一题

提示:这里可以添加系列文章的所有文章的目录,目录需要自己手动添加
C++Primer Plus 第十四章代码重用:编程练习,第一题


提示:写完文章后,目录可以自动生成,如何生成可参考右边的帮助文档

文章目录

  • C++Primer Plus 第十四章代码重用:编程练习,第一题
  • 14.7 编程练习
    • 题.
    • 头文件定义
    • 方法的实现


14.7 编程练习

题.

Wine 类有一个 sting类对象成员(参见第4章)和一个Pair 对象(参见本章);其中前者用于存储葡萄酒的名称,而后者有2个valamray<inp对象(参见本章),这两个valanay对象分别保存了葡萄酒的酿造年份和该年生产的瓶数。例如,Pair的第1个valarray对象可能为1988、1992和1996年,第2个valarray对象可能为 24、48和144瓶。Wine 最好有1个imnt 成员用于存储年数。另外,一些typedef可能有助于简化编程工作:

typedef std::valarray<int> ArrayInt;
typedef Pair<ArrayInt,ArrayInt> PairArray;

这样,PairAmray 表示的是类型 Pair<std::valarray,std:valarray>。使用包含来实现 Wine 类,并用一个简单的程序对其进行测试。Wine 类应该有一个默认构造函数以及如下构造函数:

//initialize label to l,number of years to y,
//vintage years to yrl],bottles to bot[]
wine(const char*l,int y,const int yr[],const int bot[]);
//initialize label to l,number of years to y.
//create array objects of length y
Wine(const char*l int y);

Wimne 类应该有一个 GetBotles()方法,它根据 Wine 对象能够存储儿种年份(y),提示用户输入年份和瓶数。方法 Label()返回一个指向葡萄酒名称的引用。sum()方法返回 Pair 对象中第二个 valamay对象中的瓶数总和。测试程序应提示用户输入葡萄酒名称、元素个数以及每个元素存储的年份和瓶数等信息。程序将使用这些数据来构造一个 Wine 对象,然后显示对象中保存的信息。
下面是一个简单的测试程序:

// pe14-1.cpp--using Wine class with containment
#include <iostream>
#include "winec.h"
int main (void )
{using std::cin;using std::cout;using std::endl;cout <<"Enter name of wine:";char lab[50];cin.getline(lab,50);cout <<"Enter numberofyears:";int yrs;cin >>yrs;Wine holding(lab,yrs);//store label,years,give arrays yrs elementsholding.GetBottles();//solicit input for year,bottle countholding.show();//display object contentsconst int YRs =3;int y[YRs]={199319951998};int b[YRs]={486072};
//create new object,initialize using data in arrays y and b
Wine more("Gushing Grape Red",YRS,y,b);
more.Show();
cout << "Total bottles for "<< more.Label()//use Label()method<<":"<< more.sum()<< endl;//use sum()method
cout << "Bye\n";return 0;
}

仅供参考

头文件定义

#pragma once#include <iostream>
#include <valarray>namespace n_wine
{using std::string;using std::pair;using std::valarray;class Wine{private:typedef valarray<unsigned> UnsignedArray;public:Wine (const string& name, unsigned years_total, unsigned vintage_years[], unsigned bottles_total[]);Wine (const string& name, unsigned years_total);const string& getLabel (void) const;void getBottles (void);void show (void) const;unsigned sum (void) const;private:const string	name_;const unsigned	years_total_;	// 年份数量pair<UnsignedArray, UnsignedArray>	vintage_year_and_bottles_total_;	// 酿造年份与对应瓶数};
}

方法的实现

#include "Wine.h"namespace n_wine
{using std::cin;using std::cout;using std::endl;using std::cerr;// ====================================// 公有成员函数// ====================================Wine::Wine (const string& name, unsigned years_total, unsigned vintage_years[], unsigned bottles_total[]):	name_(name),years_total_(years_total), vintage_year_and_bottles_total_(UnsignedArray(vintage_years, years_total), UnsignedArray(bottles_total, years_total)){;}Wine::Wine (const string& name, unsigned years_total):	name_(name),years_total_(years_total), vintage_year_and_bottles_total_(UnsignedArray(years_total), UnsignedArray(years_total)){;}const string&Wine::getLabel (void) const{return (name_);}voidWine::getBottles (void){cout << "Enter "<< name_ << " data for " << years_total_ << " year(s) ---- \n";for (unsigned i = 0; i < years_total_; ++i) {unsigned	vintage_year;cout << "Enter year: ";cin >> vintage_year;if (!cin) {cerr << "ERREOR! " << __FILE__ << ", " << __LINE__ << endl;exit(EXIT_FAILURE);}vintage_year_and_bottles_total_.first[i] = vintage_year;unsigned	bottles_total;cout << "Enter bottles for that year: ";cin >> bottles_total;if (!cin) {cerr << "ERREOR! " << __FILE__ << ", " << __LINE__ << endl;exit(EXIT_FAILURE);}vintage_year_and_bottles_total_.second[i] = bottles_total;}}voidWine::show (void) const{cout << "Wine: " << name_ << '\n';cout << '\t' << "Year" << '\t' << "Bottles" << '\n';for (unsigned i = 0; i < years_total_; ++i) {cout << '\t' << vintage_year_and_bottles_total_.first[i] << '\t' << vintage_year_and_bottles_total_.second[i] << endl;}}unsignedWine::sum (void) const{return (vintage_year_and_bottles_total_.second.sum());}
}

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

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

相关文章

高职人工智能专业实训课之“生成对抗网络(GAN)”

一、前言 生成对抗网络&#xff08;GAN&#xff09;作为人工智能领域的一项重要技术&#xff0c;已经在图像生成、风格迁移、数据增强等多个领域展现出巨大的潜力和应用价值。为了满足高职院校对GAN专业实训课程的需求&#xff0c;唯众人工智能教学实训凭借其前沿的教育技术平…

mst[讲课留档]

最小生成树(Minimum Spanning Tree) (1)概念 我们知道&#xff0c;树是有 n n n个结点&#xff0c; n − 1 n-1 n−1条边的无向无环的连通图。 一个连通图的生成树是一个极小的连通子图&#xff0c;它包含图中全部的 n n n个顶点&#xff0c;但只有构成一棵树的 n − 1 n-1 …

内容营销专家刘鑫炜:越是赚不到钱,越要加大推广力度

这两天&#xff0c;一位跟我们有长期合作关系的小微企业主老苏问我。 “现在钱这么不好赚&#xff0c;品牌推广应该怎么做&#xff1f;” 我说&#xff1a;“这是好机会&#xff0c;加大投放力度&#xff01;” 老苏很是不解&#xff0c;这时候不开源节流&#xff0c;还要加…

使用Git从Github上克隆仓库,修改并提交修改

前言 本次任务主要是进行github提交修改的操作练习实践&#xff0c;本文章是对实践过程以及遇到的问题进行的一个记录。 在此之前&#xff0c;我已经简单使用过github&#xff0c;Git之前已经下好了&#xff0c;所以就省略一些步骤。 步骤记录 注册github账号&#xff0c;gi…

【C++】C++指针在线程中调用与受保护内存空间读取方法

引言 在C的多线程编程中&#xff0c;正确地管理内存和同步访问是确保程序稳定性和安全性的关键。特别是当涉及到指针在线程中的调用时&#xff0c;对受保护内存空间的访问必须谨慎处理&#xff0c;以防止数据竞争、死锁和内存损坏等问题。本文将详细探讨C指针在线程中调用时如何…

理解 React 的严格模式

文章目录 有什么优劣优点&#xff1a;缺点&#xff1a; 使用场景如何使用为整个应用启用严格模式一部分代码启用严格模式 React 的 Strict Mode&#xff08;严格模式&#xff09;是一种用于检测应用中潜在问题的开发工具。它不会渲染任何可见的 UI 元素&#xff0c;而是通过激活…

element-ui如何做表单验证

Element UI 使用表单验证通常涉及两个主要组件&#xff1a;el-form 和 el-form-item。 el-form 负责管理表单数据和验证规则&#xff0c;而 el-form-item 用于定义需要验证的表单项。 <template><el-form :model"form" :rules"rules" ref"fo…

易校网校园综合跑腿小程序源码修复运营版

简介&#xff1a; 易校网校园综合跑腿小程序源码修复运营版&#xff0c;带服务端客户端前端文档说明。 源码安装方法&#xff1a; 需要准备小程序服务号 服务器 备案域名 校园网跑腿小程序源码需要准备 1.小程序 2.服务器&#xff08;推荐配置2h4g3m&#xff09; 3.域名…

使用JMeter+Grafana+Influxdb搭建可视化性能测试监控平台

【背景说明】 使用jmeter进行性能测试时&#xff0c;工具自带的查看结果方式往往不够直观和明了&#xff0c;所以我们需要搭建一个可视化监控平台来完成结果监控&#xff0c;这里我们采用三种JMeterGrafanaInfluxdb的方法来完成平台搭建 【实现原理】 通过influxdb数据库存储…

开源模型应用落地-FastAPI-助力模型交互-WebSocket篇(五)

一、前言 使用 FastAPI 可以帮助我们更简单高效地部署 AI 交互业务。FastAPI 提供了快速构建 API 的能力,开发者可以轻松地定义模型需要的输入和输出格式,并编写好相应的业务逻辑。 FastAPI 的异步高性能架构,可以有效支持大量并发的预测请求,为用户提供流畅的交互体验。此外,F…

【图论】树链剖分

树链剖分详解 - 自为风月马前卒 - 博客园 (cnblogs.com) P3384 【模板】重链剖分/树链剖分 - 洛谷 | 计算机科学教育新生态 (luogu.com.cn) #include<iostream> using namespace std;void dfs1(int u,int father){ fa[u]father; dep[u]dep[father]1; sz[u]1;for(int ih…

SpringBoot中整合ONLYOFFICE在线编辑

SpringBoot整合OnlyOffice SpringBoot整合OnlyOffice实现在线编辑1. 搭建私有的OnlyOffice的服务2. SpringBoot进行交互2.1 环境2.2 我们的流程2.3 接口规划2.3.1 获取编辑器配置的接口2.3.2 文件下载地址2.3.3 文件下载地址 3. 总结4. 注意4.1 你的项目的地址一定一定要和only…

Java中的单元测试与集成测试最佳实践

Java中的单元测试与集成测试最佳实践 大家好&#xff0c;我是免费搭建查券返利机器人省钱赚佣金就用微赚淘客系统3.0的小编&#xff0c;也是冬天不穿秋裤&#xff0c;天冷也要风度的程序猿&#xff01;今天我们将深入探讨Java中的单元测试与集成测试最佳实践。在软件开发中&am…

三层交换基础

一、什么是三层交换 三层交换是一种在OSI模型第三层&#xff0c;即网络层上工作的网络设备技术&#xff0c;它整合了二层交换机的功能和路由器的部分功能&#xff0c;以实现更高效的网络数据转发和路由选择。三层交换技术的核心在于结合了二层交换技术和三层转发技术&#xff…

【RabbitMQ实战】Springboot 整合RabbitMQ组件,多种编码示例,带你实践 看完这一篇就够了

提示&#xff1a;文章写完后&#xff0c;目录可以自动生成&#xff0c;如何生成可参考右边的帮助文档 文章目录 前言一、对RabbitMQ管理界面深入了解1、在这个界面里面我们可以做些什么&#xff1f; 二、编码练习&#xff08;1&#xff09;使用direct exchange(直连型交换机)&a…

2024 年的 13 个 AI 趋势

2024 年的 13 个 AI 趋势 人工智能对环境的影响和平人工智能人工智能支持的问题解决和决策针对人工智能公司的诉讼2024 年美国总统大选与人工智能威胁人工智能、网络犯罪和社会工程威胁人工智能治疗孤独与对人工智能的情感依赖人工智能影响者中国争夺人工智能霸主地位人工智能…

Java中的机器学习模型集成与训练

Java中的机器学习模型集成与训练 大家好&#xff0c;我是免费搭建查券返利机器人省钱赚佣金就用微赚淘客系统3.0的小编&#xff0c;也是冬天不穿秋裤&#xff0c;天冷也要风度的程序猿&#xff01;今天我们将探讨在Java中如何进行机器学习模型的集成与训练。随着人工智能和机器…

【Lua小知识】Vscode中Emmylua插件大量报错的解决方法

起因 Vscode写Lua用的好好的&#xff0c;最近突然出现了大量报错。 看报错是有未定义的全局变量&#xff0c;这里查日志才发现是由于0.7.5版本新增诊断启用配置&#xff0c;所以导致了原先好的代码&#xff0c;现在出现了大量的报错。 解决方案一 最直接的方法当然是在配置中直…

用摄像头实现识别道路中的车道线、行人与车辆检测(级联分类器、HOG+SVM、行人检测)

基于树莓派的智能小车&#xff0c;用摄像头实现识别道路中的车道线识别、行人检测与车辆检测。 本项目旨在开发一套基于摄像头的智能道路环境感知系统&#xff0c;该系统能够实时识别道路中的车道线、行人与车辆&#xff0c;为自动驾驶汽车、智能交通管理以及辅助驾驶系统提供关…

LeetCode热题100刷题3:3. 无重复字符的最长子串、438. 找到字符串中所有字母异位词、560. 和为 K 的子数组

3. 无重复字符的最长子串 滑动窗口、双指针 class Solution { public:int lengthOfLongestSubstring(string s) {//滑动窗口试一下//英文字母、数字、符号、空格,ascii 一共包含128个字符vector<int> pos(128,-1);int ans 0;for(int i0,j0 ; i<s.size();i) {//s[i]…