C++ Primer 第4版中的Sales_item.h源码

C++ Primer——Sales_item.h头文件源码及相关问题解决 C++ Primer 第五中有一个小练习要将网站上的头文件源码“拷贝到工作目录中”,首先,似乎并没有那个网站,源码也是百度资源上找的。其次,拷贝到工作目录中,添加头文件有个小细节。 源码如下: #ifndef SALESITEM_H #define SALESITEM_H #include <iostream> #include <string&amp 阅读详情

       转载地址:C++ Primer 第四版

 

       Sales_item.h文件源码如下:

 

#ifndef SALESITEM_H
#define SALESITEM_H
#include <iostream>
#include <string>
 
 
class Sales_item
{
public:
    Sales_item(const std::string &book):isbn(book),units_sold(0),revenue(0.0){}
    Sales_item(std::istream &is){ is >> *this;}
    friend std::istream& operator>>(std::istream &,Sales_item &);
    friend std::ostream& operator<<(std::ostream &,const Sales_item &);
public:
    Sales_item & operator+=(const Sales_item&);
public:
    double avg_price() const;
bool same_isbn(const Sales_item &rhs)const
{
    return isbn == rhs.isbn;
}
Sales_item():units_sold(0),revenue(0.0){}
public:
    std::string isbn;
    unsigned units_sold;
    double revenue;
};
 
using std::istream;
using std::ostream;
Sales_item operator+(const Sales_item &,const Sales_item &);
inline bool operator==(const Sales_item &lhs,const Sales_item &rhs)
{
    return lhs.units_sold == rhs.units_sold && lhs.revenue == rhs.revenue && lhs.same_isbn(rhs);
}
inline bool operator!=(const Sales_item &lhs,const Sales_item &rhs)
{
    return !(lhs == rhs);
}
 
inline Sales_item & Sales_item::operator +=(const Sales_item &rhs)
{
    units_sold += rhs.units_sold;
    revenue += rhs.revenue;
    return *this;
}
inline Sales_item operator+(const Sales_item &lhs,const Sales_item &rhs)
{
    Sales_item ret(lhs);
    ret += rhs;
    return ret;
}
inline istream& operator>>(istream &in,Sales_item &s)
{
    double price;
    in >> s.isbn >> s.units_sold >> price;
    if(in)
         s.revenue = s.units_sold * price;
    else
    s = Sales_item();
    return in;
}
inline ostream& operator<<(ostream &out,const Sales_item &s)
{
    out << s.isbn << "\t" <<s.units_sold << "\t" << s.revenue << "\t" << s.avg_price();
    return out;
}
inline double Sales_item::avg_price() const
{
    if(units_sold)
        return revenue/units_sold;
    else
    return 0;
}
#endif

    

 

      下面, 我们做一个简单的测试:

 

#include <iostream>
#include <string>
 
 
class Sales_item
{
public:
    Sales_item(const std::string &book):isbn(book),units_sold(0),revenue(0.0){}
    Sales_item(std::istream &is){ is >> *this;}
    friend std::istream& operator>>(std::istream &,Sales_item &);
    friend std::ostream& operator<<(std::ostream &,const Sales_item &);
public:
    Sales_item & operator+=(const Sales_item&);
public:
    double avg_price() const;
bool same_isbn(const Sales_item &rhs)const
{
    return isbn == rhs.isbn;
}
Sales_item():units_sold(0),revenue(0.0){}
public:
    std::string isbn;
    unsigned units_sold;
    double revenue;
};
 
using std::istream;
using std::ostream;
Sales_item operator+(const Sales_item &,const Sales_item &);
inline bool operator==(const Sales_item &lhs,const Sales_item &rhs)
{
    return lhs.units_sold == rhs.units_sold && lhs.revenue == rhs.revenue && lhs.same_isbn(rhs);
}
inline bool operator!=(const Sales_item &lhs,const Sales_item &rhs)
{
    return !(lhs == rhs);
}
 
inline Sales_item & Sales_item::operator +=(const Sales_item &rhs)
{
    units_sold += rhs.units_sold;
    revenue += rhs.revenue;
    return *this;
}
inline Sales_item operator+(const Sales_item &lhs,const Sales_item &rhs)
{
    Sales_item ret(lhs);
    ret += rhs;
    return ret;
}
inline istream& operator>>(istream &in,Sales_item &s)
{
    double price;
    in >> s.isbn >> s.units_sold >> price;
    if(in)
         s.revenue = s.units_sold * price;
    else
    s = Sales_item();
    return in;
}
inline ostream& operator<<(ostream &out,const Sales_item &s)
{
    out << s.isbn << "\t" <<s.units_sold << "\t" << s.revenue << "\t" << s.avg_price();
    return out;
}
inline double Sales_item::avg_price() const
{
    if(units_sold)
        return revenue/units_sold;
    else
    return 0;
}


int main() 
{ 
	Sales_item item1, item2; 
    std::cin >> item1 >> item2;   // read a pair of transactions 
    std::cout << item1 + item2 << std::endl; // print their sum 

    return 0; 
} 

       输入 x   1    5     x    3    4   并按enter, 结果如下:

 

x 1 5 x 3 4
x       4       17      4.25




 

C++ Primer Sales_item.h 完整实现与设计解析:从教学类到编译模型 C++编程学习中,头文件是组织代码、实现模块化编译的基础单元。其核心原理在于通过声明与定义的分离,管理代码的可见性与依赖关系,从而提升编译效率与工程可维护性。理解头文件机制的技术价值在于,它是构建大型C++项目的基石,直接影响着代码的组织结构、编译速度以及团队协作。典型的应用场景包括库文件的封装、类的接口与实现分离,以及模板编程。本文聚焦于《C++ Primer》经典教学案例——Sales_item类的实现,深入剖析其作为**教学工具**的设计意图,并提供一份可直接编译使用的**头文件**完整源码,同时解 阅读详情

相关推荐

学习C++primer(一)(加入头文件Sales_item.h)

今天是看这书的第三天,有一个问题卡了我大半天时间。这个问题就是如何加入头文件Sales_item.h。  一开始我用的是从同学那里导的VC6.0,不知道什么原因总是显示不兼容,然后就换成了C-free,发现还是这个好用,全是中文,方便操作。下面我讲讲具体是如何操作的(我自己琢磨出来的方法,不一定简洁):第一步,新建一个文件,将头文件(头文件代码在后边)的代码粘贴过来,然后保存(保存键在搜索的正下方...

Liu_Yun_L的博客 4131

C++ Primer第四中的Sales_item.h,可直接粘贴或记事本打开复制

C++ Primer 第四 Sales_item.h

c++primer学习 1.5.1 Sales_item

调用一个名为isbn的函数从一个Sales_item对象中提取ISBN书名号用输入输出运算符>>

underkid的博客 526

Sales_item.h备忘

最近在看C++Primer中文(第4),文中多次提到Sales_item.h文件,这是源码,备忘。  #ifndef SALESITEM_H #define SALESITEM_H #include #include class Sales_item { public: Sales_item(const std::string &book):isbn(book),

荟荃 393

Sales_item.h

Sales_item.h #ifndef SALESITEM_H #define SALESITEM_H #include &lt;iostream&gt; #include &lt;string&gt; class Sales_item{ public: Sales_item(const std::string &amp;book):isbn(book),units_sold(0),r...

洛阳山 1479

7.Sales_itemSales_data类

类简介 一个类定义了一个类型,以及与其关联的一组操作。就像内置类型告诉我们数据的类型和能在数据上执行的操作一样,类设计的焦点就是能够定义像内置类型一样的自定义类型,具有我们想赋予它的意义和想在它身上执行的操作。 1.Sales_itemSales_item类的作用是表示一本书的总销售额、售出册数和平均售价,能在其身上执行提取Sales_item对象中的书号、<<,>>读写Sales_item对象、=为Sales_item对象赋值、+将两个Sales_item对象相加、+=将一个S

weixin_44897707的博客 1174

1.5 类简介

在解决书店程序之前,我们还需要了解的唯一一个特性,就是如何定义一个数据结构(data structure)来表示销售数据。在C++中,我们通过定义一个**类**(class)来定义自己的数据结构。一个类定义了一个类型,以及与其关联的一组操作。类机制是C++最重要的特性之一。实际上,C++最初的一个设计焦点就是能定义使用上像内置类型一样自然的**类类型**(class type)。

GeoQi_csdn的博客 300

关于Sales_item.h 头文件使用的若干问题

关于Sales_item.h 头文件使用的若干问题 目录 使用方式 部分情况处理 一、使用方式 拷贝网站上的资源 CSDN资源https://blog.csdn.net/qq_46293869/article/details/122760132 拷贝Sales_item.h 头文件源码 在头文件目录中选择新建头文件 将源码粘贴在该头文件中 在源文件中添加相应的语句后即可使用Sales_item类型 官网下载安装 《C++ Primer》(第五)官网htt

qq_46293869的博客 2141

C++ Primer 第五第一章Sales_item.h源码

C++ Primer 第五第一章Sales_item.h源码

soldersun的博客 1万+

C++ Primer》第一章的 Sales_item.h头文件源码

Sales_item.h 头文件代码如下: #ifndef SALESITEM_H #define SALESITEM_H #include <iostream> #include <string> class Sales_item{ public: Sales_item(const std::string &book):isbn(book),units_sold(0),revenue(0.0){} Sales_item(std::istream &amp

m0_51955470的博客 1434

C++ Primer 第五 Sales_item.h哪里找?

C++ Primer Sales_item.h

weixin_52488303的博客 681

C++学习笔记(一)--Sales_item

最近开始学习C++,书本是第五C++ Primer。因为没有C++基础,所以文章可能存在错误。         #include #include "Sales_item.h" int main(int argc,char* argv[]) { Sales_item item1,item2; std::cin>>item1>>item2; std::cout//类直接相加 ret

happybravestrong的博客 1572

1.5.1 Sales_item类-Sales_item对象加法

书中页数:P19 代码名称:add_item.cc #include <iostream> #include "Sales_item.h" int main() { Sales_item item1, item2; std::cin >> item1 >> item2; //read a pair of transactions ...

IQIT 651

C++ 类简介之认识 `Sales_item` 类的基本用法(八)

C++ 中,**类(class)** 是面向对象编程的核心工具,它让我们可以自定义新的数据结构和与其相关的操作。和内置类型(如 `int`、`double`)一样,类也可以用来声明变量、进行赋值、运算等操作。类是 C++ 最强大、最重要的特性之一。 我们将以 `Sales_item` 类为例,来学习类的基本使用方式。

hello.reader 756

1.5.1 Sales_item类的头文件创建(第五)编译器VS2022

这种方法只能在这一个控制台程序中使用,怎么样像iostream一样可以在所有程序中使用,即添加自定义头文件?选择头文件(.h)复制以下代码,命名为Sales_item.h。点开解决方案资源管理器,右击头文件,添加新建项。返回自己所在项目,可以使用自定义的头文件。新建项目,控制台程序。

underkid的博客 400
上一篇: for(int i = 0; i < 10; i++)和ctrl z在VC++6.0和VS2005中的不同表现
下一篇: C++头文件中有定义会造成冲突隐患么? --- 谈谈4个例外情况
涛歌依旧
涛歌依旧 优质创作者: 后端开发技术领域 优质创作者: 后端开发技术领域 领域专家: C/C++技术领域 领域专家: C/C++技术领域
博客等级 码龄14年 28万+粉丝 2592原创
评论 8
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值