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.