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

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

提示:这里可以添加系列文章的所有文章的目录,目录需要自己手动添加
例如: 编程练习,第一题


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

文章目录

  • C++Primer Plus 第十四章代码重用:编程练习,第一题
  • 前言
    • 练习2.
    • 头文件
    • 方法
  • 测试方法:


前言

练习2.

采用私有继承而不是包含来完成编程练习1。同样,一些typedef可能会有所帮助,另外,您可能还需要考虑诸如下面这样的语句的含义:

PairArray::operator=(PairArray(ArrayInt(),ArrayInt()));
cout <<(const string &)(*this);

您设计的类应该可以使用编程练习1中的测试程序进行测试。


头文件

#pragma once

#include <iostream>
#include <valarray>

namespace n_wine
{
	using std::string;
	using std::pair;
	using std::valarray;

	typedef valarray<unsigned> UnsignedArray;

	class Wine : private string, private pair<UnsignedArray, 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_;	// 年份数量
			//	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[])
		:	string(name),
			pair<UnsignedArray, UnsignedArray>(UnsignedArray(vintage_years, years_total), UnsignedArray(bottles_total, years_total)),
			years_total_(years_total) 
	{
		;
	}
	
	Wine::Wine (const string& name, unsigned years_total)
		:	string(name),
			pair<UnsignedArray, UnsignedArray>(UnsignedArray(years_total), UnsignedArray(years_total)),
			years_total_(years_total) 
	{
		;
	}

	const string&
	Wine::getLabel (void) const
	{
		return ((const string&)*this);
	}

	void
	Wine::getBottles (void)
	{
		cout << "Enter "<< getLabel() << " data for " << years_total_ << " year(s) ---- \n";

		auto&	vintage_year_and_bottles_total = (pair<UnsignedArray, UnsignedArray>&)*this;
		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;
		}
	}

	void
	Wine::show (void) const
	{
		cout << "Wine: " << getLabel() << '\n';

		cout << '\t' << "Year" << '\t' << "Bottles" << '\n';
		const auto&	vintage_year_and_bottles_total = (pair<UnsignedArray, UnsignedArray>)*this;
		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;
		}
	}

	unsigned
	Wine::sum (void) const
	{
		const auto&	vintage_year_and_bottles_total = (pair<UnsignedArray, UnsignedArray>)*this;
		return (vintage_year_and_bottles_total.second.sum());
	}
}

测试方法:

参考第一题的测试方法


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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

工厂模式之简单工厂模式

文章目录 工厂模式工厂模式分为工厂模式的角色简单工厂模式案例代码定义一个父类&#xff0c;三个子类定义简单工厂客户端使用输出结果 工厂模式 工厂模式属于创造型的模式&#xff0c;用于创建对象。 工厂模式分为 简单工厂模式&#xff1a;定义一个简单工厂类&#xff0c;根…

Vue3的模板语法插值表达式用法

在template中输入“5 3” &#xff0c;是没有运算能力的&#xff0c;只会把字符直接显示出来&#xff0c;代码如下&#xff1a; <template><view>这是demo</view><view>5 3</view><navigator open-type"navigateBack"><vi…

永劫无间国服延迟高、报错、卡顿的处理措施一览

永劫无间国服延迟高、报错、卡顿怎么办&#xff1f;快速解决办法分享 第一个办法&#xff1a;改善延迟 如果是一直遇到永劫无间国服延迟高、报错、卡顿的问题&#xff0c;重启游戏也不管用的话&#xff0c;那应该就是网络问题&#xff0c;玩家可以启动雷神&#xff0c;让其快速…

服了!DELETE 同一行记录也会造成死锁!!

1 问题背景 “哥们&#xff0c;又双叒叕写了个死锁&#xff0c;秀啊&#xff01;&#x1f60f;” 就算是经常写死锁的同学看到估计都会有点懵&#xff0c;两条一模一样的 DELETE 语句怎么会产生死锁呢&#xff1f; 2 MySQL 锁回顾 看到这里的靓仔肯定对 MySQL 的锁非常了解&…

红酒与建筑:品味历史与艺术的交汇

在时间的长河中&#xff0c;红酒与建筑都是人类智慧的结晶&#xff0c;它们各自承载着历史的厚重与艺术的韵味。当这两者交汇时&#xff0c;仿佛是一场穿越时空的对话&#xff0c;将我们带入一个既古老又现代、既深沉又温柔的世界。今天&#xff0c;就让我们一起走进这个奇妙的…

企业消费采购成本和员工体验如何实现“鱼和熊掌“的兼得?

有企业说企业消费采购成本和员工体验的关系好比是“鱼和熊掌”&#xff0c;无法兼得&#xff1f; 要想控制好成本就一定要加强管控&#xff0c;但是加强管控以后&#xff0c;就会很难让员工获得满意的体验度。如果不加以管控&#xff0c;员工自由度增加了&#xff0c;往往就很难…

为什么要在成像应用中使用图像采集卡?

达到最大产量是工业和工厂自动化的关键标准之一。提高传感器分辨率和帧速率有助于实现这一目标&#xff0c;但也使带宽达到极限&#xff0c;并提出了新的传输问题。当前高带宽接口(如10GigE、相机直接与PC连接和嵌入式系统)的实现促使成像应用的许多用户询问如何以最佳配置最优…

Day63 代码随想录打卡|回溯算法篇---电话号码的字母组合

题目&#xff08;leecode T17&#xff09;&#xff1a; 给定一个仅包含数字 2-9 的字符串&#xff0c;返回所有它能表示的字母组合。答案可以按 任意顺序 返回。 给出数字到字母的映射如下&#xff08;与电话按键相同&#xff09;。注意 1 不对应任何字母。 方法&#xff1a;…

CCS方形低角度光源实现更均匀的照射

机器视觉系统中&#xff0c;光源设计作为图像成像效果的关键&#xff0c;今天的光源系列分享——FPQ3系列。 特点&#xff1a; ・从4个方向以低角度照射均匀扩射光的方型低角度光源。 ・实现比上一代产品2倍的高输出。白色和蓝色的亮度提高至2倍&#xff0c;红色的亮度提高至…

app单页下载页源码带管理后台

新版带后台管理APP应用下载页,自动识别安卓苹果下载页&#xff0c;带管理后台&#xff0c;内置带3套App下载模板带中文模板/英文模板随时切换。 app单页下载页源码带管理后台

保存到redis中的token乱码了

示图&#xff1a; 原因是缓存保存到redis需要序列化操作&#xff0c;没有序列化会出现这样的问题 序列化redis第一步&#xff1a; package com.abliner.test.configure.redis;import com.fasterxml.jackson.annotation.JsonAutoDetect; import com.fasterxml.jackson.annota…

【雷丰阳-谷粒商城 】【分布式高级篇-微服务架构篇】【17】认证服务01

持续学习&持续更新中… 守破离 【雷丰阳-谷粒商城 】【分布式高级篇-微服务架构篇】【17】认证服务01 环境搭建验证码倒计时短信服务邮件服务验证码短信形式&#xff1a;邮件形式&#xff1a; 异常机制MD5参考 环境搭建 C:\Windows\System32\drivers\etc\hosts 192.168.…

西南交通大学【算法分析与设计实验3】

实验3.3 任务分配问题 实验目的 &#xff08;1&#xff09;理解穷举法典型算法的求解过程。 &#xff08;2&#xff09;学习穷举法的时间复杂度分析方法&#xff0c;并通过实验验证算法的执行效率。 &#xff08;3&#xff09;学会如何利用穷举法求解具体问题&#xff0c;了…

51单片机嵌入式开发:STC89C52操作8八段式数码管原理

提示&#xff1a;文章写完后&#xff0c;目录可以自动生成&#xff0c;如何生成可参考右边的帮助文档 STC89C52操作8八段式数码管原理 1 8位数码管介绍1.1 8位数码管概述1.2 8位数码管原理1.3 应用场景 2 原理图图解2.1 74HC573原理2.2 74HC138原理2.3 数码管原理 3 数码管程序…

现代智能宠物喂食器方案定制

现代智能宠物喂食器不仅具备定时喂食功能&#xff0c;帮助宠物主人管理宠物的饮食时间和食量&#xff0c;还加入了录音功能和摄像头&#xff0c;使得宠物主人即使不在家也能与宠物保持互动&#xff0c;并实时监控宠物的状况。此外&#xff0c;一些产品还具备紧急预警功能&#…

Docker加速器配置指南:提升镜像下载速度的秘诀 加速安装Mysql Redis ES

在安装 Docker 镜像时&#xff0c;由于官方镜像下载速度较慢&#xff0c;我们可以使用阿里云的镜像加速器来提升下载速度。 使用阿里云镜像加速器 首先&#xff0c;找到并配置阿里云的镜像加速器。安装教程如下&#xff1a; 登录阿里云&#xff0c;进入容器镜像服务。直达链…

PyTorch之nn.Module与nn.functional用法区别

文章目录 1. nn.Module2. nn.functional2.1 基本用法2.2 常用函数 3. nn.Module 与 nn.functional3.1 主要区别3.2 具体样例&#xff1a;nn.ReLU() 与 F.relu() 参考资料 1. nn.Module 在PyTorch中&#xff0c;nn.Module 类扮演着核心角色&#xff0c;它是构建任何自定义神经网…

大数据------JavaWeb------JSP(完整知识点汇总)

JSP 定义 JSP&#xff08;Java Server Pages&#xff09;&#xff0c;即Java服务端页面。它是一种动态的网页技术&#xff0c;其中可以定义HTML、CSS、JS等静态内容&#xff0c;还可以定义Java代码的动态内容JSP HTML Java 说白了JSP就是一个页面&#xff0c;它既可以写HTML标…

【每日刷题】Day79

【每日刷题】Day79 &#x1f955;个人主页&#xff1a;开敲&#x1f349; &#x1f525;所属专栏&#xff1a;每日刷题&#x1f34d; &#x1f33c;文章目录&#x1f33c; 1. 1619. 删除某些元素后的数组均值 - 力扣&#xff08;LeetCode&#xff09; 2. 1365. 有多少小于当前…

Python UUID模块:深入理解与使用技巧

&#x1f49d;&#x1f49d;&#x1f49d;欢迎莅临我的博客&#xff0c;很高兴能够在这里和您见面&#xff01;希望您在这里可以感受到一份轻松愉快的氛围&#xff0c;不仅可以获得有趣的内容和知识&#xff0c;也可以畅所欲言、分享您的想法和见解。 推荐:「stormsha的主页」…