1--该章节新知识点

① 在 UNIX 和 Windows 系统中,执行完一个程序后,可以通过 echo 命令获得其返回值;

# UNIX系统中,通过如下命令获得状态
echo $?

② 在标准库中,定义了两个输出流 ostream 对象:cerr 和 clog;

cerr 通常用于输出警告和错误信息,称为标准错误;

clog 通常用于输出程序时的一般性信息;

③ std::endl 的作用:用于结束当前行,并将与设备关联的缓冲区(buffer)中的内容刷到设备中;

缓冲刷新操作可以保证程序所产生的所有输出都写入输入流中,而不是仅停留在内存中等待写入流;

④ 当遇到文件结束符或遇到一个无效输入时,istream对象的状态会变为无效;处于无效状态的istream对象会使条件(while循环)变为假;

在 UNIX 系统中,输入文件结束符的命令为:Ctrl + D;

⑤ 编程习惯问题:

标准库头文件通常不带后缀;

包含来自标准库的头文件时,应该用尖括号(< >)包含头文件名;

对于不属于标准库的头文件,习惯用双引号(" ")包围;

2--书包程序完整代码

① Sales_item.h

#ifndef SALESITEM_H
// we're here only if SALESITEM_H has not yet been defined
#define SALESITEM_H// Definition of Sales_item class and related functions goes here
#include <iostream>
#include <string>class Sales_item {
// these declarations are explained section 7.2.1, p. 270
// and in chapter 14, pages 557, 558, 561
friend std::istream& operator>>(std::istream&, Sales_item&);
friend std::ostream& operator<<(std::ostream&, const Sales_item&);
friend bool operator<(const Sales_item&, const Sales_item&);
friend bool
operator==(const Sales_item&, const Sales_item&);
public:// constructors are explained in section 7.1.4, pages 262 - 265// default constructor needed to initialize members of built-in typeSales_item() = default;Sales_item(const std::string &book): bookNo(book) { }Sales_item(std::istream &is) { is >> *this; }
public:// operations on Sales_item objects// member binary operator: left-hand operand bound to implicit this pointerSales_item& operator+=(const Sales_item&);// operations on Sales_item objectsstd::string isbn() const { return bookNo; }double avg_price() const;
// private members as before
private:std::string bookNo;      // implicitly initialized to the empty stringunsigned units_sold = 0; // explicitly initializeddouble revenue = 0.0;
};// used in chapter 10
inline
bool compareIsbn(const Sales_item &lhs, const Sales_item &rhs)
{ return lhs.isbn() == rhs.isbn(); }// nonmember binary operator: must declare a parameter for each operand
Sales_item operator+(const Sales_item&, const Sales_item&);inline bool
operator==(const Sales_item &lhs, const Sales_item &rhs)
{// must be made a friend of Sales_itemreturn lhs.units_sold == rhs.units_sold &&lhs.revenue == rhs.revenue &&lhs.isbn() == rhs.isbn();
}inline bool
operator!=(const Sales_item &lhs, const Sales_item &rhs)
{return !(lhs == rhs); // != defined in terms of operator==
}// assumes that both objects refer to the same ISBN
Sales_item& Sales_item::operator+=(const Sales_item& rhs)
{units_sold += rhs.units_sold; revenue += rhs.revenue; return *this;
}// assumes that both objects refer to the same ISBN
Sales_item
operator+(const Sales_item& lhs, const Sales_item& rhs)
{Sales_item ret(lhs);  // copy (|lhs|) into a local object that we'll returnret += rhs;           // add in the contents of (|rhs|) return ret;           // return (|ret|) by value
}std::istream&
operator>>(std::istream& in, Sales_item& s)
{double price;in >> s.bookNo >> s.units_sold >> price;// check that the inputs succeededif (in)s.revenue = s.units_sold * price;else s = Sales_item();  // input failed: reset object to default statereturn in;
}std::ostream&
operator<<(std::ostream& out, const Sales_item& s)
{out << s.isbn() << " " << s.units_sold << " "<< s.revenue << " " << s.avg_price();return out;
}double Sales_item::avg_price() const
{if (units_sold) return revenue/units_sold; else return 0;
}
#endif

② 测试程序

#include <iostream>
#include "Sales_item.h"int main(){Sales_item total;if(std::cin >> total){Sales_item trans;while(std::cin >> trans){if(total.isbn() == trans.isbn()){total += trans;}else{std::cout << total << std::endl;total = trans;}}std::cout << total << std::endl;}else{std::cerr << "No data?!" << std::endl;return -1;}return 0;
}

C++ Primer阅读笔记--书包程序相关推荐

  1. C++Primer阅读笔记

    文章目录 算术类型 基本内置类型 变量 const限定符 类型别名 auto decltype 字符串.向量和数组 String for vector begin和end运算符 note 数组 字符数 ...

  2. 【阅读笔记】程序员的自我修养

    第一章 温故而知新 ​ 早期的计算机没有很复杂的图形功能,CPU的核心频率也不高,跟内存的频率一致,它们都直接连接在同一个总线上的.由于IO设备如显示设备.键盘.软盘和磁盘等速度与CPU相比还是慢很多 ...

  3. C++ Primer Plus 6th代码阅读笔记

    C++ Primer Plus 6th代码阅读笔记 第一章没什么代码 第二章代码 carrots.cpp : cout 可以拼接输出,cin.get()接受输入 convert.cpp 函数原型放在主 ...

  4. C++Primer Plus (第六版)阅读笔记 + 源码分析【目录汇总】

    C++Primer Plus (第六版)阅读笔记 + 源码分析[第一章:预备知识] C++Primer Plus (第六版)阅读笔记 + 源码分析[第二章:开始学习C++] C++Primer Plu ...

  5. 《程序员修炼之道:从小工到专家》阅读笔记03

    <程序员修炼之道:从小工到专家>阅读笔记03 第六章 当你编码时 靠巧合编程应该避免靠巧合编程,避免依靠运气和偶然的成功.而要深思熟虑的编程. 怎样深思熟虑的编程:1)总是意识到你在做什么 ...

  6. C++ Primer 第五版 第6章——函数阅读笔记及习题答案(完整,附C++代码)

    C++Primer(第五版)第6章函数的阅读笔记及课后习题答案总结,课后习题答案是自己学习写出来的,如果有误,欢迎指正 还不完整,后续会更新添加 阅读笔记 C++ Primer 第五版 第6章 6.1 ...

  7. 【阅读笔记】Taro转小程序编译源码解析

    前言 这篇文章的主要是对taro/taro-tarnsformer-wx进行源码解析,对于想要了解Taro或者了解babel的人希望看了能得到一定的启发. 由于我文笔实在太烂,所以整篇文章都是以阅读笔 ...

  8. 【TgM阅读笔记】《微信小程序开发——从入门到实战》(陈云贵、高旭)

    阅读笔记系列(二) 阅读前言: 速度笔记: 比较起来: 此处摘录前言内容简介同时用以后续文章目录大纲: 阅读前言: 读本书是基于三大前提下的: 了解到其基础设计方式有Java Web程序设计有共同对接 ...

  9. OpenFace代码阅读笔记(1) ------FeatureExtraction的程序流程

    OpenFace代码阅读笔记 ------FeatureExtraction的程序流程 1. Init 1.1 解析main函数的输入参数 1.2 读取txt文件中的配置参数 1.3 load mod ...

最新文章

  1. ButterKnife 8.4.0 @BindView 失败,nullpointerexception
  2. 用webBrowser取源文件取不到的点击数--选秀榜selectop.com网站内容管理系统之六
  3. mysql mydumper_MySQL 之mydumper安装详解
  4. linux查看进程详细信息top,linux查看系统进程信息命令 px,top详解
  5. PHP常见概念混淆(五)之PHP类常量、静态属性和属性的区别
  6. 调用sklearn包中的PLA算法[转载]
  7. Python学习之面向对象(一)
  8. 皮卡丘是如何发电的?
  9. 用阿里网盘有一段时间了,说说总体感受吧
  10. java微信刷卡支付demo,微信刷卡支付API详解
  11. 盲盒抽奖微信小程序源码
  12. Citrix PVS7.6 测试调试
  13. STM32CubeIDE使用
  14. 中国伸缩式起重机行业市场供需与战略研究报告
  15. MS计算轨迹的分子间作用能
  16. 用编译器写的mov ax,[0]指令,执行的实际上是mov ax,0
  17. 深度学习理论篇之----前世、今生、未来
  18. leecode--链表对折
  19. C#开发技术 计算器(二进制、八进制、十进制)
  20. VQA系列论文(五)

热门文章

  1. [Power Query] 汇总表
  2. 从自己挖的坑里爬出来
  3. 经济基础知识(初级)【5】
  4. go 语言之“查找一个字符串中汉字个数”
  5. 实现点击图片放大查看功能
  6. 拼多多有哪些API?
  7. iOS 最新版9.3 disk image
  8. Python-pip镜像源配置及国内常用镜像源
  9. 网闸虚拟服务器,tcp客户端和tcp服务器端 网闸
  10. 狂神 Docker学习笔记 从基础到进阶 一步到位