我是靠谱客的博主 冷静太阳,最近开发中收集的这篇文章主要介绍C++primer 7.2.1节练习,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

练习7,20

友元出现的情况是当其他类或者函数需要访问他的非公有成员时;利:可以让别的类或函数访问类的私有数据成员。弊:数据成员的安全性可能会降低。

练习7.21

使用了更多的函数来取得私有成员的值,保证原本程序的正常运行;

 1 #include <iostream>
 2 #include <string>
 3 #include "factmain.h"
 4 using namespace std;
 5
 6 struct Sales_data {
 7
friend ostream &print(ostream &os, const Sales_data &item);
 8
friend istream &read(istream &is, Sales_data &item);
 9 private:
10
string bookNo;
11 
unsigned units_sold;
12
double price = 0.0;
13
double revenue = 0.0;
14 public:
15
Sales_data() = default;
16
Sales_data(const string &s, const unsigned &u, const double &p) : bookNo(s), units_sold(u), price(p) {};
17
Sales_data(const string &s, const unsigned &u) : bookNo(s), units_sold(u) {};
18
Sales_data(istream &is);
19
string
isbn() const { return bookNo; }
20
unsigned &rUnit() { return units_sold; }
21
double &rPrice() { return price; }
22
double &rRevenue() { return revenue; }
23
Sales_data &combine(const Sales_data&);
24 };
25
26 Sales_data add(const Sales_data &lhs, const Sales_data &rhs);
27 ostream &print(ostream &os, const Sales_data &item);
28 istream &read(istream &is, Sales_data &item);
29
30
31 int main()
//main函数的部分需要改变
32 {
33
Sales_data test1("hello",56);
34 
print(cout, test1);
35 
Sales_data item1(cin);
36 
Sales_data item2;
37
double totalRevenue = 0;
38
double totalSold = 0;
39
int counter = 1;
40
if ((item1.isbn()).empty())
41 
{
42
item1.rRevenue() = item1.rPrice() * item1.rUnit();
43
while (read(cin,item2)) {
44
item2.rRevenue() = item2.rPrice() * item2.rUnit();
45
if (item1.isbn() == item2.isbn()) {
46 
item1.combine(item2);
47
++counter;
48 
}
49
else {
50
print(cout, item1) << endl;
51
item1.isbn() = item2.isbn();
52
item1.rUnit() = item2.rUnit();
53
item1.rRevenue() = item2.rRevenue();
54
counter = 1;
55 
}
56 
}
57
print(cout, item2) << endl;
58 
}
59
system("pause");
60
return 0;
61 }
62
63 Sales_data add(const Sales_data & lhs, const Sales_data & rhs) //非成员函数add
64 {
65
Sales_data sum = lhs;
66 
sum.combine(rhs);
67
return sum;
68
// TODO: 在此处插入 return 语句
69 }
70
71 istream & read(istream & is, Sales_data & item)
72 {
73
is >> item.bookNo >> item.units_sold >> item.price;
74
item.revenue = item.units_sold * item.price;
75
return is;
76
// TODO: 在此处插入 return 语句
77 }
78
79 ostream & print(ostream & os, const Sales_data & item)
80 {
81
os << item.bookNo << " " << item.units_sold << " " << item.price << " " << item.revenue;
82
return os;
83
// TODO: 在此处插入 return 语句
84 }
85
86 Sales_data & Sales_data::combine(const Sales_data &rhs)
87 {
88
units_sold += rhs.units_sold;
89
revenue += rhs.revenue;
90
return *this;
91 }
92
93 Sales_data::Sales_data(istream & is)
94 {
95
read(is, *this);
96 }

练习7.22

见最终版本

转载于:https://www.cnblogs.com/wuyinfenghappy/p/7293973.html

最后

以上就是冷静太阳为你收集整理的C++primer 7.2.1节练习的全部内容,希望文章能够帮你解决C++primer 7.2.1节练习所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(60)

评论列表共有 0 条评论

立即
投稿
返回
顶部