`
haoningabc
  • 浏览: 1484766 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

c++的类系芥么顶一地,卧槽

    博客分类:
  • c
c++ 
阅读更多
摘自c++primer

#ifndef SALESITEM_H
#define SALESITEM_H

// Definition of Sales_item class and related functions goes here


#include <iostream>
#include <string>

class Sales_item {
friend bool operator==(const Sales_item&, const Sales_item&);
// other members as before
public:
    // added constructors to initialize from a string or an istream
    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:
    // operations on Sales_item objects
    // member binary operator: left-hand operand bound to implicit this pointer
    Sales_item& operator+=(const Sales_item&);
    // other members as before
    
public:
    // operations on Sales_item objects
    double avg_price() const;
    bool same_isbn(const Sales_item &rhs) const
        { return isbn == rhs.isbn; }
    // default constructor needed to initialize members of built-in type
    Sales_item(): units_sold(0), revenue(0.0) { }
// private members as before
private:
    std::string isbn;
    unsigned units_sold;
    double revenue;

};


// 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_item
    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); // != defined in terms of operator==
}

using std::istream; using std::ostream;

// assumes that both objects refer to the same isbn
inline
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
inline
Sales_item 
operator+(const Sales_item& lhs, const Sales_item& rhs) 
{
    Sales_item ret(lhs);  // copy lhs into a local object that we'll return
    ret += rhs;           // add in the contents of rhs 
    return ret;           // return ret by value
}

inline
istream& 
operator>>(istream& in, Sales_item& s)
{
    double price;
    in >> s.isbn >> s.units_sold >> price;
    // check that the inputs succeeded
    if (in)
        s.revenue = s.units_sold * price;
    else 
        s = Sales_item();  // input failed: reset object to default state
    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
分享到:
评论

相关推荐

    C#调用C++DLL导出类

    3. 创建一个C#托管类,持有C++对象的指针,并提供相应的C#方法调用C++方法。 4. 确保正确处理对象生命周期,防止内存泄漏。 请注意,这只是一个基本示例,实际应用中可能需要处理更复杂的情况,如错误处理、数据...

    json字符串转换c++类对象

    在C++编程中,将JSON字符串转换为C++类对象是一项常见的任务,特别是在处理网络通信、数据存储或配置文件时。JSON(JavaScript Object Notation)是一种轻量级的数据交换格式,易于人阅读和编写,同时也易于机器解析...

    从C++导出类到Python

    本教程将聚焦于如何从C++中导出类到Python,这样你就可以在Python环境中利用C++的强大性能和效率。这通常通过Python的C API或者第三方库如SWIG(Simplified Wrapper and Interface Generator)来实现。 **C++导出类...

    鸡啄米:C++编程入门系列

    鸡啄米:C++编程入门系列之十三(类与对象:类的声明、成员的访问 控制和对象) 鸡啄米:C++编程入门系列之十四(类与对象:构造函数和析构函数) 鸡啄米:C++编程入门系列之十五(类与对象:类的组合) 鸡啄...

    C#C++混合编程示例(C#调用非托管C++类)

    这个示例项目可能包含了一个C++源文件,定义了一个非托管的C++类,并导出了几个方法。然后,在C#项目中,通过P/Invoke调用了这些方法。项目文件可能包括C++的头文件、源文件以及C#的项目文件,展示了如何在VS2010中...

    C++高效日志类(库)

    经过参考前辈们写的资料加上自己不断地研究改进,现在完成了一个C++高效日志的类。经过我本人的测试发现该类库可以在WINDOWS平台、多线程环境下出色完成写日志的任务,可以达到50M/S的日志输出量。同时做了日志切割...

    C++类和数据结构

    C++类和数据结构 C++类和数据结构 作者:(美国)查尔兹 (Jeffrey S.Childs) 译者:张杰良

    C++TCP通讯类(兼容window和linux)

    总之,"C++ TCP通讯类(兼容window和linux)"是一个实用的工具,通过封装TCP通信过程,简化了开发工作,使得在Windows和Linux环境下编写网络程序更加便捷。理解和掌握这些知识点对于进行跨平台的C++网络编程至关重要。

    C#通过C++/CLI间接调用NativeCPP类的DLL文件

    例如,我们可以创建一个名为`NativeCppClassWrapper`的类,该类包含一个指向原生C++类实例的指针,并提供与原生接口一致的托管方法。这样做的目的是让C#代码可以通过C++/CLI类调用原生函数。 2. **实现原生C++接口...

    tolua++ 版helloworld (lua脚本调用C++类的成员函数方法)

    关于tolua++的资料太少,这个通过实例让你知道如何通过tolua++和C++交互,简单明了。 通过5个文件来演示这个tolua++版 hello world hello.lua ,hello.h ,hello.pkg ,...这个程序实现了脚本调用C++类的成员函数方法

    RabbitMQ client c++封装类 c++工程 (没有问题)

    在这个压缩包中,包含了RabbitMQ客户端的C++封装类以及一个VS2010的工程示例,非常适合C++开发者学习和使用RabbitMQ。 首先,RabbitMQ-c是RabbitMQ的C语言客户端库,它提供了连接、认证、通道(channels)、发布/...

    C++实现的非常好的一个矩阵类

    这里我们讨论的是一份由外国人编写的C++矩阵类实现,该类全面支持了线性代数中的基本操作,如矩阵的加法、减法、乘法、转置以及矩阵的逆运算。以下将详细介绍这些知识点。 首先,`Matrix.cpp`和`Matrix.h`是C++中的...

    C++C++C++C++C++C++C++

    C++C++C++C++C++C++C++C++C++C++C++C++C++C++C++C++C++C++C++C++C++C++C++C++C++C++C++C++C++C++C++C++C++C++C++C++C++C++C++C++C++C++C++C++C++C++C++C++C++C++C++C++C++C++C++C++

    C++使用ADO封装连接SQLServer类

    本篇文章将聚焦于如何使用ActiveX Data Objects(ADO)在C++中封装一个连接到SQL Server的类。ADO是微软提供的一种用于访问数据库的接口,它使得C++程序员能够轻松地与多种数据库进行通信,包括SQL Server。 首先,...

    基于C++的高斯坐标系下经纬度与大地坐标转换程序

    这篇讨论主要围绕一个基于C++编程语言实现的程序,该程序能够处理高斯坐标系下的经纬度与大地坐标的转换。首先,我们需要理解这两种坐标系统以及它们在实际应用中的意义。 高斯坐标系是一种在中国广泛使用的平面...

    C++读写excel类,封装的完整,可以直接用

    在这个场景下,标题提到的“C++读写excel类”可能是指一个已经封装好的库,方便开发者直接在C++项目中进行Excel文件的操作。描述中提到这个类经过了实际使用,效果良好,适用于使用VC(Visual C++)进行Excel操作,...

    C++连接数据库,连接类

    本教程将聚焦于如何在C++中实现数据库连接,主要使用面向对象的方法,即通过创建一个连接类来处理数据库交互。我们将探讨MFC(Microsoft Foundation Classes)库,这是一个为Windows应用程序开发提供支持的C++库,它...

    c++ socket类封装(udp/tcp)

    总结,C++中的socket类封装对于新手来说是一个很好的起点,它提供了易于理解和使用的接口,隐藏了复杂的网络编程细节。无论是TCP还是UDP,理解并实现这样的封装都有助于提升程序员在网络编程领域的技能。通过学习和...

    一个免费的c++小游戏集合

    这个资源包集合了一个多样化的C++编程实现的小游戏,适合对C++编程感兴趣的初学者和爱好者。C++是一种强大的、通用的面向对象编程语言,以其高效性和灵活性闻名,广泛应用于游戏开发、系统软件、嵌入式系统以及各种...

Global site tag (gtag.js) - Google Analytics