On Friday, July 4, 2014 1:54:13 PM UTC-4, fl wrote:
Hi,
I learn C++ from a C++ Primer book. I find its class header file having a member
function:
    Sales_item(std::istream &is) { is >> *this; }
but I cannot find its application code to call it. I have tried myself, but it
fails because I uses file input stream does not match the std::istream type. 
I do not know an appropriate input stream even after I see the inheritance map
of istream.
From this definition, it should be called.
Can you show me how to call this member function?
Thanks,
#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;
};
I do find some istream example, but it still cannot pass compiling. "trans",
inside while loop is shown in red (error) on grammar check.
What is wrong? Thanks,
#include <iostream>
#include <fstream>
using namespace std;
#include "Sales_item.h"
int main() 
{
   // declare variables to hold running sum and data for the next record 
   Sales_item total, trans;
 std::filebuf fb;
 if (fb.open ("test.txt",std::ios::in))
 {
   std::istream is(&fb);
   while (is)
     trans(is); 
There is no call operator in the class.