c++primer 第五版 第七章 抽象数据类型

#include<iostream>
#include<string>

using namespace std;

struct Sales_data //类
{
	//新成员
	string isbn() const { return bookNo; }//ISBN编号
	Sales_data& combine(const Sales_data&);//将Sales_data对象加到另一个对象上
	double avg_price() const;
	//数据成员
	string bookNo;
	unsigned units_sold = 0;
	double revenue = 0.0;
};
//在类的外部定义成员函数
double Sales_data::avg_price()const
{
	if (units_sold) return revenue / units_sold;
	else return 0;
}
//定义一个返回this的对象函数
Sales_data& Sales_data::combine(const Sales_data& rhs)
{
	units_sold += rhs.units_sold;
	revenue += rhs.revenue;
		return* this;
}
//Sales_data非成员接口函数
Sales_data add(const Sales_data & lhs, const Sales_data& rhs)//执行两个Sales_data对象加法
{
	Sales_data sum = lhs;//lsh的数据成员拷贝给sum
	sum.combine(rhs);//lsh的数据成员加到sum中
	return sum;
}
//Sales_data非成员接口函数
ostream& print(ostream& os, const Sales_data& item)//将Sales_data对象的值输出到ostream
{
	os << item.isbn() << " " << item.units_sold << " "
		<< item.revenue << " " << item.avg_price();
	return os;
}
//Sales_data非成员接口函数
istream& read(istream& is, Sales_data& item) //将数据从istream 读入到Sales_data对象中
{
	double price = 0;
	is >> item.bookNo >> item.units_sold >> price;
	item.revenue = price*item.units_sold;
	return is;
}

int main()
{
	Sales_data total;
	total.isbn();

	return 0;
}

ex7.4

//ex7.4 编写一个名为person 的类,使其表示人员的姓名和住址。使用
//string对象存放这些元素,接下来的练习将不断充实这个类的其他特征。

#include<iostream>
#include<string>
 
using namespace std;

struct Person 
{
	string name() const { return Name; }
	string addr() const { return Addr; }
	string Name;
	string Addr;
};

ostream& print(ostream& os, const Person& item)
{
	os << item.name() << " " << item.addr();
	return os;
}
istream& read(istream& is, Person& item)
{
	is >> item.Name >> item.Addr ;
	return is;
}

int main()
{
	Person total;
	total.addr();
	total.name();

	return 0;
}

ex7.12

#include<iostream>
#include<string>

using namespace std;


struct Sales_data //类
{
	//构造函数
	Sales_data() = default;
	Sales_data(const string& s) :bookNo(s) {}//构造函数初始值列表
	Sales_data(const string &s,unsigned n,double p):
		bookNo(s),units_sold(n), revenue(p* n) {}
	//read的声明
	Sales_data(istream& is)//这里是类内部 不要Sales_data::
{
	read(is, *this);
}

//	Sales_data(istream&);这个去掉

	//其他成员
	//新成员
	string isbn() const { return bookNo; }//ISBN编号
	Sales_data& combine(const Sales_data&);//将Sales_data对象加到另一个对象上

	istream& read(istream& is, Sales_data& item) //将数据从istream 读入到Sales_data对象中
	{
		double price = 0;
		is >> item.bookNo >> item.units_sold >> price;
		item.revenue = price * item.units_sold;
		return is;
	}

	double avg_price() const;
	//数据成员
	string bookNo;
	unsigned units_sold = 0;
	double revenue = 0.0;
};

//Sales_data::Sales_data(istream& is)
//{
//	read(is, *this);
//}
//在类的外部定义成员函数
double Sales_data::avg_price()const
{
	if (units_sold) return revenue / units_sold;
	else return 0;
}
//定义一个返回this的对象函数
Sales_data& Sales_data::combine(const Sales_data& rhs)
{
	units_sold += rhs.units_sold;
	revenue += rhs.revenue;
		return* this;
}
//Sales_data非成员接口函数
Sales_data add(const Sales_data & lhs, const Sales_data& rhs)//执行两个Sales_data对象加法
{
	Sales_data sum = lhs;//lsh的数据成员拷贝给sum
	sum.combine(rhs);//lsh的数据成员加到sum中
	return sum;
}
//Sales_data非成员接口函数
ostream& print(ostream& os, const Sales_data& item)//将Sales_data对象的值输出到ostream
{
	os << item.isbn() << " " << item.units_sold << " "
		<< item.revenue << " " << item.avg_price();
	return os;


}
int main()
{
	Sales_data total;
	print(cout, total);
	cout << endl;
	Sales_data item1("23456-8888");
	print(cout, item1);
	cout << endl;
	Sales_data item2("23456-8888", 5, 23);
	print(cout, item2);
	cout<<item2.avg_price();
	cout << endl;
	Sales_data item3(cin);
	print(cout, item3);
	cout << endl;

//	total.isbn();

	return 0;
}

ex7.11

#include<iostream>
#include<string>

using namespace std;

struct Sales_data //类
{
	//构造函数
	Sales_data() = default;
	Sales_data(const string& s) :bookNo(s) {}//构造函数初始值列表
	Sales_data(const string &s,unsigned n,double p):
		bookNo(s),units_sold(n), revenue(p* n) {}
	Sales_data(istream&);

	//其他成员
	//新成员
	string isbn() const { return bookNo; }//ISBN编号
	Sales_data& combine(const Sales_data&);//将Sales_data对象加到另一个对象上
	double avg_price() const;
	//数据成员
	string bookNo;
	unsigned units_sold = 0;
	double revenue = 0.0;
};
//Sales_data非成员接口函数
istream& read(istream& is, Sales_data& item) //将数据从istream 读入到Sales_data对象中
{
	double price = 0;
	is >> item.bookNo >> item.units_sold >> price;
	item.revenue = price * item.units_sold;
	return is;
}
Sales_data::Sales_data(istream& is)
{
	read(is, *this);
}
//在类的外部定义成员函数
double Sales_data::avg_price()const
{
	if (units_sold) return revenue / units_sold;
	else return 0;
}
//定义一个返回this的对象函数
Sales_data& Sales_data::combine(const Sales_data& rhs)
{
	units_sold += rhs.units_sold;
	revenue += rhs.revenue;
		return* this;
}
//Sales_data非成员接口函数
Sales_data add(const Sales_data & lhs, const Sales_data& rhs)//执行两个Sales_data对象加法
{
	Sales_data sum = lhs;//lsh的数据成员拷贝给sum
	sum.combine(rhs);//lsh的数据成员加到sum中
	return sum;
}
//Sales_data非成员接口函数
ostream& print(ostream& os, const Sales_data& item)//将Sales_data对象的值输出到ostream
{
	os << item.isbn() << " " << item.units_sold << " "
		<< item.revenue << " " << item.avg_price();
	return os;


}


int main()
{
	Sales_data total;
	print(cout, total);
	cout << endl;
	Sales_data item1("23456-8888");
	print(cout, item1);
	cout << endl;
	Sales_data item2("23456-8888", 5, 23);
	print(cout, item2);
	cout << endl;
	Sales_data item3(cin);
	print(cout, item3);
	cout << endl;

	total.isbn();

	return 0;
}

ex7.21

#include<iostream>
using namespace std;

class Sales_data
{
	//友元函数
	friend Sales_data add(const Sales_data&, const Sales_data&);
	friend istream& read(istream&, Sales_data&);
	friend ostream& print(ostream&, const Sales_data&);
public:
	Sales_data() = default;
	Sales_data(const string & s) :bookNo(s) {}//构造函数初始值列表
	Sales_data(const string & s, unsigned n, double p) :
		bookNo(s), units_sold(n), revenue(p * n) {}
	//read的声明
	Sales_data(istream&);//只需声明不需定义 这里是类内部 不要Sales_data::
	string isbn() const { return bookNo; }//ISBN编号
	Sales_data& combine(const Sales_data&);//将Sales_data
	inline double avg_price() const
	{
		return units_sold ? revenue / units_sold : 0;
	};
private://在内部可以访问 外部不可访问
	
	//数据成员
	string bookNo;
	unsigned units_sold = 0;
	double revenue = 0.0;
};

//定义一个返回this的对象函数
Sales_data& Sales_data::combine(const Sales_data& rhs)
{
	units_sold += rhs.units_sold;
	revenue += rhs.revenue;
	return*this;
}
//Sales_data非成员接口函数
Sales_data add(const Sales_data& lhs, const Sales_data& rhs)//执行两个Sales_data对象加法
{
	Sales_data sum = lhs;//lsh的数据成员拷贝给sum
	sum.combine(rhs);//lsh的数据成员加到sum中
	return sum;
}
//Sales_data非成员接口函数
ostream& print(ostream& os, const Sales_data& item)//将Sales_data对象的值输出到ostream
{
	os << item.isbn() << " " << item.units_sold << " "
		<< item.revenue << " " << item.avg_price();
	return os;


}
//声明
Sales_data add(const Sales_data&, const Sales_data&);
istream& read(istream&, Sales_data&);
 ostream& print(ostream&, const Sales_data&);

int main()
{

	Sales_data total;
	print(cout, total);
	cout << endl;
	Sales_data item1("23456-8888");
	print(cout, item1);
	cout << endl;
	Sales_data item2("23456-8888", 5, 23);
	print(cout, item2);
	cout << endl;
	//Sales_data item3(cin);
	//print(cout, item3);
	//cout << endl;
	return 0;
}

ex7.22(报错)

//ex7.4 编写一个名为person 的类,使其表示人员的姓名和住址。使用
//string对象存放这些元素,接下来的练习将不断充实这个类的其他特征。

#include<iostream>
#include<string>
 
using namespace std;

class Person 
{
public:
	friend ostream& print(ostream& , const Person& );
	friend istream& read(istream& , Person& );
	//构造函数
	string name() const { return Name; }
	string addr() const { return Addr; }
private:
	//数据成员
	string Name;
	string Addr;
};

ostream& print(ostream& os, const Person& item)
{
	os << item.name() << " " << item.addr();
	return os;
}
istream& read(istream& is, Person& item)
{
	is >> item.Name >> item.Addr ;
	return is;
}

int main()
{
	//Person zhangsan("s","sa");报错
	//print(cout, zhangsan);
	Person total;
	total.addr();
	total.name();

	return 0;
}

ex7.24

#include<iostream>
#include<vector>

using namespace std;

class Screen
{
public:
	void some_member() const;
	typedef string::size_type pos;
	Screen() = default;
	Screen(pos ht, pos wd, char c) :height(ht), width(wd), contents(ht* wd, c) {}
	Screen(pos ht, pos wd) :height(ht), width(wd), contents(ht* wd, ' ') {}
	char get()const { return contents[cursor]; }
	inline char get( pos ht,pos wd )const;
	Screen& move(pos r, pos c);
private:
	mutable size_t access_ctr;
	pos cursor = 0;
	pos height = 0, width = 0;
	string contents;
};


inline 
Screen& Screen::move(pos r, pos c)//r行c列
{
	pos row = r * width;
	cursor = row + c;//光标 移动往下加c行
	return*this;
}

char Screen::get(pos r, pos c)const
{
	pos row = r * width;
	return contents[row + c];
}

void Screen::some_member()const
{
	++access_ctr;
}

class window_mgr
{
private:
	vector<Screen> screen{ Screen(24,80, ' ') };
};
int main()
{
	return 0;
}

ex7.24

#include<iostream>
#include<vector>

using namespace std;

class Screen
{
public:
	void some_member() const;
	typedef string::size_type pos;
	Screen() = default;
	Screen(pos ht, pos wd, char c) :height(ht), width(wd), contents(ht* wd, c) {}
	Screen(pos ht, pos wd) :height(ht), width(wd), contents(ht* wd, ' ') {}
	Screen& set(char);
	Screen& set(pos r, pos c, char);
	char get()const { return contents[cursor]; }
	Screen& display(ostream& os)
	{
		do_display(os);//	do_display只是一个名字 真正起作用的是另外的函数
		return *this;//不是常量
	}
const Screen& display(ostream& os)const//这里是display 不要写错
	{
		do_display(os);
		return *this;//常量
	}
	inline char get( pos ht,pos wd )const;
	Screen& move(pos r, pos c);
private:
	mutable size_t access_ctr;
	pos cursor = 0;
	pos height = 0, width = 0;
	string contents;
	void do_display(ostream& os)const { os << contents; }
};


inline 
Screen& Screen::move(pos r, pos c)//r行c列
{
	pos row = r * width;
	cursor = row + c;//光标 移动往下加c行
	return*this;
}

char Screen::get(pos r, pos c)const
{
	pos row = r * width;
	return contents[row + c];
}

void Screen::some_member()const
{
	++access_ctr;
}

//声明
inline Screen& Screen::set(char c)
{
	contents[cursor] = c;
	return *this;
}

inline Screen& Screen::set(pos row, pos col, char ch)//不移动光标
{
	contents[row * width + col] = ch;
	return *this;
}


class window_mgr
{
private:
	vector<Screen> screen{ Screen(24,80, ' ') };
};
int main()
{
	Screen myScreen(5, 5, 'x');
	myScreen.move(4, 0).set('#').display(cout);
	cout << "\n";//换行
	myScreen.display(cout);
	cout<<endl;

	return 0;
}

ex7_29

#include<iostream>
#include<vector>

using namespace std;

class Screen
{
public:
	void some_member() const;
	typedef string::size_type pos;
	Screen() = default;
	Screen(pos ht, pos wd, char c) :height(ht), width(wd), contents(ht* wd, c) {}
	Screen(pos ht, pos wd) :height(ht), width(wd), contents(ht* wd, ' ') {}
	Screen set(char);
	Screen& set(pos r, pos c, char);
	char get()const { return contents[cursor]; }
	Screen display(ostream& os)
	{
		do_display(os);//	do_display只是一个名字 真正起作用的是另外的函数
		return *this;//不是常量
	}
const Screen display(ostream& os)const
	{
		do_display(os);
		return *this;//常量
	}
	inline char get( pos ht,pos wd )const;
	Screen move(pos r, pos c);
private:
	mutable size_t access_ctr;
	pos cursor = 0;
	pos height = 0, width = 0;
	string contents;
	void do_display(ostream& os)const { os << contents; }
};


inline 
Screen Screen::move(pos r, pos c)//r行c列
{
	pos row = r * width;
	cursor = row + c;//光标 移动往下加c行
	return*this;
}

char Screen::get(pos r, pos c)const
{
	pos row = r * width;
	return contents[row + c];
}

void Screen::some_member()const
{
	++access_ctr;
}

//声明
inline Screen Screen::set(char c)
{
	contents[cursor] = c;
	return *this;
}

inline Screen& Screen::set(pos row, pos col, char ch)//不移动光标
{
	contents[row * width + col] = ch;
	return *this;
}


class window_mgr
{
private:
	vector<Screen> screen{ Screen(24,80, ' ') };
};
int main()
{
	Screen myScreen(5, 5, 'x');
	myScreen.move(4, 0).set('#').display(cout);
	cout << "\n";//换行
	myScreen.display(cout);
	cout<<endl;

	return 0;
}

ex7.31

#include<iostream>

using namespace std;

struct Y;//Y在x 之前被声明

struct X//X在Y前被定义 顺序不变
{
	Y* p;
};
struct Y
{
	X x;
};
int main()
{
	return 0;
}

ex7.31(2)

#include<iostream>

using namespace std;
void f();
struct X
{
	friend void f() {}
	X() { f(); }
	void g();
	void h();
};

void X::g() { return f(); }

void X::h() { return f(); }

int main()
{
	return 0;
}

ex7.32

#include<iostream>
#include<vector>

using namespace std;

class Screen;//声明
class Window_mgr
{
public:
	using ScreenIndex = vector<Screen>::size_type;
	inline void clear(ScreenIndex);
private:

	vector<Screen> screen;//去掉内部初始化
};

class Screen
{
	friend class Window_mgr;
public:
	void some_member() const;
	typedef string::size_type pos;
	Screen() = default;
	Screen(pos ht, pos wd, char c) :height(ht), width(wd), contents(ht* wd, c) {}
	Screen(pos ht, pos wd) :height(ht), width(wd), contents(ht* wd, ' ') {}
	Screen set(char);
	Screen& set(pos r, pos c, char);
	char get()const { return contents[cursor]; }
	Screen display(ostream& os)
	{
		do_display(os);//	do_display只是一个名字 真正起作用的是另外的函数
		return *this;//不是常量
	}
	const Screen display(ostream& os)const
	{
		do_display(os);
		return *this;//常量
	}
	inline char get(pos ht, pos wd)const;
	Screen move(pos r, pos c);
private:
	mutable size_t access_ctr;
	pos cursor = 0;
	pos height = 0, width = 0;
	string contents;
	void do_display(ostream& os)const { os << contents; }
};


inline
Screen Screen::move(pos r, pos c)//r行c列
{
	pos row = r * width;
	cursor = row + c;//光标 移动往下加c行
	return*this;
}

char Screen::get(pos r, pos c)const
{
	pos row = r * width;
	return contents[row + c];
}

void Screen::some_member()const
{
	++access_ctr;
}

//声明
inline Screen Screen::set(char c)
{
	contents[cursor] = c;
	return *this;
}

inline Screen& Screen::set(pos row, pos col, char ch)//不移动光标
{
	contents[row * width + col] = ch;
	return *this;
}


 void Window_mgr::clear(ScreenIndex i)
{
	if (i >= screen.size())return;
	Screen& s = screen[i];
	s.contents = string(s.height * s.width, ' ');
}
int main()
{
	Screen myScreen(5, 5, 'x');
	myScreen.move(4, 0).set('#').display(cout);
	cout << "\n";//换行
	myScreen.display(cout);
	cout << endl;

	return 0;
}

ex7.33

#include<iostream>
#include<vector>

using namespace std;

class Screen;//声明
class Window_mgr
{
public:
	using ScreenIndex = vector<Screen>::size_type;
	inline void clear(ScreenIndex);
private:

	vector<Screen> screen;//去掉内部初始化
};

class Screen
{
	friend class Window_mgr;
public:
	void some_member() const;
	typedef string::size_type pos;
	Screen() = default;
	Screen(pos ht, pos wd, char c) :height(ht), width(wd), contents(ht* wd, c) {}
	Screen(pos ht, pos wd) :height(ht), width(wd), contents(ht* wd, ' ') {}
	Screen set(char);
	Screen& set(pos r, pos c, char);
	char get()const { return contents[cursor]; }
	Screen display(ostream& os)
	{
		do_display(os);//	do_display只是一个名字 真正起作用的是另外的函数
		return *this;//不是常量
	}
	const Screen display(ostream& os)const
	{
		do_display(os);
		return *this;//常量
	}

	pos size()const;
	/*Screen::pos Screen::size()const
	{
		return height * width;
	}*/

	inline char get(pos ht, pos wd)const;
	Screen move(pos r, pos c);
private:
	mutable size_t access_ctr;
	pos cursor = 0;
	pos height = 0, width = 0;
	string contents;
	void do_display(ostream& os)const { os << contents; }
};


Screen::pos Screen::size()const
{
	return height * width;
}


inline Screen Screen::move(pos r, pos c)//r行c列
{
	pos row = r * width;

	cursor = row + c;//光标 移动往下加c行
	return*this;
}

char Screen::get(pos r, pos c)const
{
	pos row = r * width;
	return contents[row + c];
}

void Screen::some_member()const
{
	++access_ctr;
}

//声明
inline Screen Screen::set(char c)
{
	contents[cursor] = c;
	return *this;
}

inline Screen& Screen::set(pos row, pos col, char ch)//不移动光标
{
	contents[row * width + col] = ch;
	return *this;
}


void Window_mgr::clear(ScreenIndex i)
{
	if (i >= screen.size())return;
	Screen& s = screen[i];
	s.contents = string(s.height * s.width, ' ');
}
int main()
{
	Screen myScreen(5, 5, 'x');
	myScreen.move(4, 0).set('#').display(cout);
	cout << "\n";//换行
	myScreen.display(cout);
	cout << endl;

	return 0;
}

ex7.36

#include<iostream>
using namespace std;

class Sales_data
{
	//友元函数
	friend Sales_data add(const Sales_data&, const Sales_data&);
	friend istream& read(istream&, Sales_data&);
	friend ostream& print(ostream&, const Sales_data&);
public:
	Sales_data() = default;
	Sales_data(const string& s) :bookNo(s) {}//构造函数初始值列表
	Sales_data(const string& s, unsigned n, double p) :
		bookNo(s), units_sold(n), revenue(p* n) {}
	//read的声明

	Sales_data(istream);//只需声明不需定义 这里是类内部 不要Sales_data::

	string isbn() const { return bookNo; }//ISBN编号
	Sales_data& combine(const Sales_data&);//将Sales_data
	inline double avg_price() const
	{
		return units_sold ? revenue / units_sold : 0;
	};
private://在内部可以访问 外部不可访问

	//数据成员
	string bookNo;
	unsigned units_sold = 0;
	double revenue = 0.0;
};

//定义一个返回this的对象函数
Sales_data& Sales_data::combine(const Sales_data& rhs)
{
	units_sold += rhs.units_sold;
	revenue += rhs.revenue;
	return*this;
}
//Sales_data非成员接口函数
Sales_data add(const Sales_data& lhs, const Sales_data& rhs)//执行两个Sales_data对象加法
{
	Sales_data sum = lhs;//lsh的数据成员拷贝给sum
	sum.combine(rhs);//lsh的数据成员加到sum中
	return sum;
}
//Sales_data非成员接口函数
ostream& print(ostream& os, const Sales_data& item)//将Sales_data对象的值输出到ostream
{
	os << item.isbn() << " " << item.units_sold << " "
		<< item.revenue << " " << item.avg_price();
	return os;


}
//声明
Sales_data add(const Sales_data&, const Sales_data&);
istream& read(istream&, Sales_data&);
ostream& print(ostream&, const Sales_data&);

int main()
{

	Sales_data total;
	print(cout, total);
	cout << endl;
	Sales_data item1("23456-8888");
	print(cout, item1);
	cout << endl;
	Sales_data item2("23456-8888", 5, 23);
	print(cout, item2);
	cout << endl;
	//Sales_data item3(cin);
	//print(cout, item3);
	//cout << endl;
	return 0;
}

ex7.34

#include<iostream>
#include<string>

using namespace std;

typedef string Type;
Type initVal();

class Exercise
{
public:
	typedef double Type;
	Type setVal(Type);
	Type initVal();
private:
	int val;
};
//声明
Exercise::Type Exercise::initVal()//定义setVal
{
	return val;
}
Exercise::Type Exercise::setVal(Type parm)//定义setVal
{
	val = parm + initVal();
	return val;
}

int main()
{
	return 0;
}

ex7.40
class Book//成员
{
public:
istream &read(istream &);
string &get_isbn();
unsigned get_sales();
private:
string isbn;
string name;
double price;
string publisher;
string date;
string category;
}
ex7.43

#include<iostream>
using namespace std;

class No {
public:
	No(int a) {
	}
};

struct A {
	A(int a=0) : my_mem{ a } {}//对my_mem赋值 a=0不能少
	No my_mem;
};

A a(9);

int main()
{
	return 0;
}

ex7.45

#include<iostream>
#include<vector>
using namespace std;

class No {
public:
	No(int a) {
	}
};

struct A {
	A(int a=0) : my_mem{ a } {}//对my_mem赋值 a=0不能少
	No my_mem;
};

A a(9);

int main()
{
	vector<A> vec(10);
	return 0;
}

ex7.48

#include<iostream>
using namespace std;

class Sales_data
{
	//友元函数
	friend Sales_data add(const Sales_data&, const Sales_data&);
	friend istream& read(istream&, Sales_data&);
	friend ostream& print(ostream&, const Sales_data&);
public:
	Sales_data() = default;
	explicit Sales_data(const string& s) :bookNo(s) {}//构造函数初始值列表
	Sales_data(const string& s, unsigned n, double p) :
		bookNo(s), units_sold(n), revenue(p* n) {}
	//read的声明
	Sales_data(istream&);//只需声明不需定义 这里是类内部 不要Sales_data::
	string isbn() const { return bookNo; }//ISBN编号
	Sales_data& combine(const Sales_data&);//将Sales_data
	inline double avg_price() const
	{
		return units_sold ? revenue / units_sold : 0;
	};
private://在内部可以访问 外部不可访问

	//数据成员
	string bookNo;
	unsigned units_sold = 0;
	double revenue = 0.0;
};

//定义一个返回this的对象函数
Sales_data& Sales_data::combine(const Sales_data& rhs)
{
	units_sold += rhs.units_sold;
	revenue += rhs.revenue;
	return*this;
}
//Sales_data非成员接口函数
Sales_data add(const Sales_data& lhs, const Sales_data& rhs)//执行两个Sales_data对象加法
{
	Sales_data sum = lhs;//lsh的数据成员拷贝给sum
	sum.combine(rhs);//lsh的数据成员加到sum中
	return sum;
}
//Sales_data非成员接口函数
ostream& print(ostream& os, const Sales_data& item)//将Sales_data对象的值输出到ostream
{
	os << item.isbn() << " " << item.units_sold << " "
		<< item.revenue << " " << item.avg_price();
	return os;


}
//声明
Sales_data add(const Sales_data&, const Sales_data&);
istream& read(istream&, Sales_data&);
ostream& print(ostream&, const Sales_data&);

int main()
{

	//Sales_data total;
	//print(cout, total);
	//cout << endl;
	//Sales_data item1("23456-8888");
	//print(cout, item1);
	//cout << endl;
	//Sales_data item2("23456-8888", 5, 23);
	//print(cout, item2);
	//cout << endl;
	//Sales_data item3(cin);
	//print(cout, item3);
	//cout << endl;
	string null_isbn("9 - 99 - 999999");
	Sales_data item1(null_isbn);
	Sales_data item2("99999");
	return 0;
}

ex7.58

#include<iostream>
#include<vector>

using namespace std;

class Example {
public:
	static double rate;//不能double赋值
	static const int vecSize = 20;
	static vector<double>vec;
};

double Example::rate = 6.5;//在外边给初始值
vector<double>Example::vec(Example::vecSize);

int main()
{
	return 0;
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值