7.6
#include "stdafx.h"
#include<string>
#include <iostream>
using namespace std;
class Sales_data
{
public:
string bookNo;
unsigned units_sold;
double price;
double revenue;
Sales_data& read(Sales_data& item);
string isbn();
Sales_data& print(Sales_data& item);
double avg_price()const;
Sales_data& combine(const Sales_data item);
};
string Sales_data::isbn()
{
return bookNo;
}
Sales_data& Sales_data::read(Sales_data& item)
{
cin >> item.bookNo >> item.units_sold >> price;
item.revenue = price * item.units_sold;
return *this;
}
Sales_data& Sales_data::print(Sales_data& item)
{
cout << item.isbn() << " " << item.units_sold << " "
<< item.revenue << " " << item.avg_price();
return *this;
}
double Sales_data::avg_price()const
{
if (units_sold)
return revenue / units_sold;
else
return 0;
}
Sales_data& Sales_data::combine(const Sales_data item)
{
units_sold += item.units_sold;
revenue += item.revenue;
return *this;
}
int main()
{
Sales_data data1;
if (cin)
{
data1.read(data1);
Sales_data trans;
while (cin)
{
trans.read(trans);
if (trans.isbn() == data1.isbn())
{
data1.combine(trans);
}
else
{
data1.print(data1);
data1 = trans;
}
}
data1.print(data1);
}
else
cerr << "no data!" << endl;
return 0;
}
7.13
#include "stdafx.h"
#include <vector>
#include<cmath>
#include<string>
#include <iostream>
using namespace std;
class Sales_data
{
public:
string bookNo;
unsigned units_sold;
double price;
double revenue;
Sales_data() = default;
//Sales_data(const string &s) : bookNo(s){};
//Sales_data(const string &s, unsigned n,double p) : bookNo(s), units_sold(n),price(p){};
Sales_data(istream &);
Sales_data& read(Sales_data& item);
string isbn();
Sales_data& print(Sales_data& item);
double avg_price()const;
Sales_data& combine(const Sales_data item);
};
Sales_data::Sales_data(istream &)
{
cin >> bookNo >> units_sold >> price;
revenue = price * units_sold;
}
Sales_data& Sales_data::read(Sales_data& item)
{
cin >> item.bookNo >> item.units_sold >> price;
item.revenue = price * item.units_sold;
return *this;
}
string Sales_data::isbn()
{
return bookNo;
}
Sales_data& Sales_data::print(Sales_data& item)
{
cout << "结果是:";
cout << item.isbn() << " " << item.units_sold << " "
<< item.revenue << " " << item.avg_price();
return *this;
}
double Sales_data::avg_price()const
{
if (units_sold)
return revenue / units_sold;
else
return 0;
}
Sales_data& Sales_data::combine(const Sales_data item)
{
units_sold += item.units_sold;
revenue += item.revenue;
return *this;
}
int main()
{
Sales_data data1(cin); //增加了Sales_data(istream &)
if (cin)
{
data1.read(data1);
Sales_data trans;
while (cin)
{
trans.read(trans);
if (trans.isbn() == data1.isbn())
{
data1.combine(trans);
}
else
{
data1.print(data1);
data1 = trans;
}
}
data1.print(data1);
}
else
cerr << "no data!" << endl;
return 0;
}
7.23
#include "stdafx.h"
#include <vector>
#include<cmath>
#include<string>
#include <iostream>
using namespace std;
int main()
{
}
class Screen
{
public:
typedef string::size_type pos;
Screen() = default;
Screen(pos ht, pos wd) :height(ht), width(wd) {};
Screen(pos ht, pos wd,char c) :height(ht), width(wd),contents(ht * wd,c) {};
void some_member() const;
private:
pos height = 0, width = 0;
string contents{10, ' '};
mutable size_t access_ctr;
};
void Screen::some_member() const
{
++access_ctr;
}
7.28
#include "stdafx.h"
#include <vector>
#include<cmath>
#include<string>
#include <iostream>
using namespace std;
class Screen
{
public:
typedef string::size_type pos;
Screen() = default;
Screen(pos ht, pos wd) :height(ht), width(wd) {};
Screen(pos ht, pos wd,char c) :height(ht), width(wd),contents(ht * wd,c) {};
void some_member() const;
inline Screen &Screen::move(pos r, pos c);
inline Screen &Screen::set(char c);
inline const Screen &display(ostream &os) const;
private:
pos height = 0, width = 0;
pos cursor = 0;
string contents{' '};
mutable size_t access_ctr;
inline void Screen::do_display(ostream &os) const;;
};
void Screen::some_member() const
{
++access_ctr;
}
inline Screen &Screen::move(pos r, pos c)
{
pos row = r * width;
cursor = row + c;
return *this;
}
inline Screen &Screen::set(char c)
{
contents[cursor] = c;
return *this;
}
inline const Screen &Screen::display(ostream &os) const
{
do_display(os);
return *this;
}
inline void Screen::do_display(ostream &os) const
{
os << contents;
}
int main()
{
Screen myScreen(5, 5, 'x');
myScreen.move(4, 0).set('#').display(cout);
cout << endl;
myScreen.display(cout);
cout << endl;
}
7.33
#include "stdafx.h"
#include <vector>
#include<cmath>
#include<string>
#include <iostream>
using namespace std;
class Screen
{
public:
typedef string::size_type pos;
string::size_type Screen::size()const ;
Screen() = default;
Screen(pos ht, pos wd) :height(ht), width(wd) {};
Screen(pos ht, pos wd,char c) :height(ht), width(wd),contents(ht * wd,c) {};
void some_member() const;
inline Screen &Screen::move(pos r, pos c);
inline Screen &Screen::set(char c);
inline const Screen &display(ostream &os) const;
friend class Window_mgr;
private:
pos height = 0, width = 0;
pos cursor = 0;
string contents{' '};
mutable size_t access_ctr;
inline void Screen::do_display(ostream &os) const;;
};
class Window_mgr
{
public:
using ScreenIndex = vector<Screen>::size_type;
void clear(ScreenIndex);
private:
vector<Screen> screens{ Screen(24, 80, ' ') };
};
void Window_mgr::clear(ScreenIndex i)
{
Screen &s = screens[i];
s.contents = string(s.height * s.width, ' ');
}
void Screen::some_member() const
{
++access_ctr;
}
inline Screen &Screen::move(pos r, pos c)
{
pos row = r * width;
cursor = row + c;
return *this;
}
inline Screen &Screen::set(char c)
{
contents[cursor] = c;
return *this;
}
inline const Screen &Screen::display(ostream &os) const
{
do_display(os);
return *this;
}
inline void Screen::do_display(ostream &os) const
{
os << contents;
}
string::size_type Screen::size()const //首先返回类型,再进入作用域
{
return height * width;
}
int main()
{
Screen myScreen(5, 5, 'x');
myScreen.move(4, 0).set('#').display(cout);
cout << endl;
myScreen.display(cout);
cout << endl;
}