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

【C++ Primer Plus习题】15.4

大家好,这里是国中之林!
❥前些天发现了一个巨牛的人工智能学习网站,通俗易懂,风趣幽默,忍不住分享一下给大家。点击跳转到网站。有兴趣的可以点点进去看看←

问题:

这里是引用
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

解答:
main.cpp

#include <iostream>
#include "sales.h"
using namespace std;int main()
{double vals1[12] = { 1220,1100,1122,2212,1232,2334,2884,2393,3302,2922,3002,3544 };double vals2[12] = { 12,11,22,21,32,34,28,29,33,29,32,35 };Sales sales1(2011, vals1, 12);LabeledSales sales2("Blogstar", 2012, vals2, 12);cout << "First try block:\n";try{int i;cout << "Year = " << sales1.Year() << endl;for (i = 0; i < 12; i++){cout << sales1[i] << ' ';if (i % 6 == 5)cout << endl;}cout << "Year=" << sales2.Year() << endl;cout << "Label=" << sales2.Label() << endl;for (i = 0; i <= 12; i++){cout << sales2[i] << ' ';if (i % 6 == 5)cout << endl;}cout << "End of try block 1" << endl;}catch (Sales::bad_index&bad){if (typeid(LabeledSales::nbad_index) == typeid(bad)){LabeledSales::nbad_index* p = dynamic_cast<LabeledSales::nbad_index*>(&bad);cout << p->what();cout << "Company:" << p->label_val() << endl;cout << "bad index:" << p->bi_val() << endl;}else if (typeid(Sales::bad_index) == typeid(bad)){cout << bad.what();cout << "bad index:" << bad.bi_val() << endl;}}cout << "\nNext try block:" << endl;try{sales2[2] = 37.5;sales1[20] = 23345;cout << "End of try block 2." << endl;}catch (Sales::bad_index&bad){if (typeid(LabeledSales::nbad_index) == typeid(bad)){LabeledSales::nbad_index* p = dynamic_cast<LabeledSales::nbad_index*>(&bad);cout << p->what();cout << "Company:" << p->label_val() << endl;cout << "bad index:" << p->bi_val() << endl;}else if (typeid(Sales::bad_index) == typeid(bad)){cout << bad.what();cout << "bad index:" << bad.bi_val() << endl;}}cout << "done\n";return 0;
}

sales.h

#pragma once
#include <iostream>
#include <stdexcept>
#include <string>
using namespace std;class Sales
{
public:enum{MONTHS=12};class bad_index :public logic_error{private:int bi;public:explicit bad_index( int ix,const string & s = "Index error int Sales object\n" );int bi_val()const { return bi; }virtual ~bad_index()throw(){}};explicit Sales(int yy = 0);Sales(int yy, const double* gr, int n);virtual ~Sales(){}int Year()const { return year; }virtual double operator[](int i)const;virtual double& operator[](int i);
private:double gross[MONTHS];int year;
};class LabeledSales :public Sales
{
public:class nbad_index :public Sales::bad_index{private:string lbl;public:nbad_index(const string& lb, int ix, const string& s = "Index error in LabeledSales objecrt\n");const string& label_val()const { return lbl; }virtual ~nbad_index()throw() {}};explicit LabeledSales(const string& lb = "none", int yy = 0);LabeledSales(const string& lb, int yy, const double* gr, int n);virtual ~LabeledSales() {}const string& Label()const { return label; }virtual double operator[](int i)const;virtual double& operator[](int i);private:string label;};

sales.cpp

#include "sales.h"Sales::bad_index::bad_index(int ix, const string& s) :logic_error(s), bi(ix)
{}Sales::Sales(int yy)
{year = yy;for (int i = 0; i < MONTHS; ++i)gross[i] = 0;
}Sales::Sales(int yy, const double* gr, int n)
{year = yy;int lim = (n < MONTHS) ? n : MONTHS;int i;for (i = 0; i < lim; ++i)gross[i] = gr[i];for (; i < MONTHS; ++i)gross[i] = 0;
}double Sales::operator[](int i)const
{if (i < 0 || i >= MONTHS)throw bad_index(i);return gross[i];
}double& Sales::operator[](int i)
{if (i < 0 || i >= MONTHS)throw bad_index(i);return gross[i];}LabeledSales::nbad_index::nbad_index(const string& lb, int ix, const string& s) :Sales::bad_index(ix, s)
{lbl = lb;
}LabeledSales::LabeledSales(const string& lb, int yy) :Sales(yy)
{label = lb;
}LabeledSales::LabeledSales(const string& lb, int yy, const double* gr, int n) :Sales(yy, gr, n)
{label = lb;
}double LabeledSales::operator[](int i)const
{if (i < 0 || i >= MONTHS)throw nbad_index(Label(), i);return Sales::operator[](i);
}double& LabeledSales::operator[](int i)
{if (i < 0 || i >= MONTHS)throw nbad_index(Label(), i);return Sales::operator[](i);
}

运行结果:
在这里插入图片描述

考查点:

  • 异常
  • 继承
  • []运算符重载
  • dynamic_cast

2024年9月12日21:33:42

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • INIC6081量产工具下载,initio6081开卡软件分享
  • 机器线程数量突然激增的原因是什么?
  • 【网络】高级IO——五种IO模式
  • STM32G070 CubeMX配置多通道/单通道ADC+DMA流程 LL库
  • 本地部署大语言模型详细操作步骤
  • 【项目开发 | Python】基于“羊了个羊“风格的消除类小游戏
  • 计算机操作系统之并行性与并发性笔记
  • NumPy 线性代数
  • CSS-3
  • Redis -- 全记录(面试)
  • 解决Matlab报错:MEX 文件 ‘D:\MATLAB\toolbox\maple\maplemex.mexw64‘ 无效: 缺少依赖共享库
  • erlang学习: Mnesia Erlang数据库4
  • windows10 python 解决鼠标右键菜单中没有Edit with IDLE(不使用注册表编辑器)
  • 如何评估一个RAG(检索增强生成)系统-上篇
  • 大数据新视界 --大数据大厂之Flink强势崛起:大数据新视界的璀璨明珠
  • 【每日笔记】【Go学习笔记】2019-01-10 codis proxy处理流程
  • 08.Android之View事件问题
  • iOS小技巧之UIImagePickerController实现头像选择
  • JAVA_NIO系列——Channel和Buffer详解
  • java正则表式的使用
  • tensorflow学习笔记3——MNIST应用篇
  • Three.js 再探 - 写一个跳一跳极简版游戏
  • use Google search engine
  • 浮动相关
  • 码农张的Bug人生 - 初来乍到
  • 前端每日实战 2018 年 7 月份项目汇总(共 29 个项目)
  • 浅谈Golang中select的用法
  • 微信小程序开发问题汇总
  • hi-nginx-1.3.4编译安装
  • 进程与线程(三)——进程/线程间通信
  • 说说我为什么看好Spring Cloud Alibaba
  • 通过调用文摘列表API获取文摘
  • ## 1.3.Git命令
  • (4)事件处理——(6)给.ready()回调函数传递一个参数(Passing an argument to the .ready() callback)...
  • (C语言)球球大作战
  • (day18) leetcode 204.计数质数
  • (超简单)构建高可用网络应用:使用Nginx进行负载均衡与健康检查
  • (附源码)springboot人体健康检测微信小程序 毕业设计 012142
  • (排序详解之 堆排序)
  • (算法二)滑动窗口
  • (原創) 如何使用ISO C++讀寫BMP圖檔? (C/C++) (Image Processing)
  • (转)从零实现3D图像引擎:(8)参数化直线与3D平面函数库
  • (转)利用PHP的debug_backtrace函数,实现PHP文件权限管理、动态加载 【反射】...
  • * CIL library *(* CIL module *) : error LNK2005: _DllMain@12 already defined in mfcs120u.lib(dllmodu
  • ./configure,make,make install的作用(转)
  • .net core 依赖注入的基本用发
  • .NET 使用 XPath 来读写 XML 文件
  • .NET:自动将请求参数绑定到ASPX、ASHX和MVC(菜鸟必看)
  • .net遍历html中全部的中文,ASP.NET中遍历页面的所有button控件
  • .Net转Java自学之路—基础巩固篇十三(集合)
  • .project文件
  • .secret勒索病毒数据恢复|金蝶、用友、管家婆、OA、速达、ERP等软件数据库恢复
  • [ JavaScript ] JSON方法
  • [ Linux ] Linux信号概述 信号的产生
  • [ 隧道技术 ] 反弹shell的集中常见方式(四)python反弹shell