-
Notifications
You must be signed in to change notification settings - Fork 16
Expand file tree
/
Copy pathExer15_26.cpp
More file actions
62 lines (62 loc) · 2 KB
/
Exer15_26.cpp
File metadata and controls
62 lines (62 loc) · 2 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
#include <iostream>
#include "Exer15_26_Quote.h"
#include "Exer15_26_Disc_quote.h"
#include "Exer15_26_Bulk_quote.h"
using std::cout;
using std::endl;
int main()
{
// calls Quote(const string&, double)
Quote q("978-7-121-20038-0", 128.0);
cout << endl;
// calls Bulk_quote(const string&, double, size_t, double)
// calls Disc_quote(const string&, double, size_t, double)
// calls Quote(const string&, double)
Bulk_quote bq("978-7-121-20038-0", 128.0, 6, 0.05);
cout << endl;
// calls Quote(const Quote&)
Quote q1(q);
cout << endl;
// calls Quote(const Quote&)
Quote q2(bq);
cout << endl;
// calls Bulk_quote(const Bulk_quote&)
// calls Disc_quote(const Disc_quote&)
// calls Quote(const Quote&)
Bulk_quote bq1(bq);
cout << endl;
// calls Quote(Quote&&)
Quote q3 = std::move(bq);
cout << endl;
// calls Bulk_quote(Bulk_quote&&)
// calls Disc_quote(Disc_quote&&)
// calls Quote(Quote&&)
Bulk_quote bq2 = std::move(bq1);
cout << endl;
// calls Bulk_quote()
// calls Disc_quote()
// calls Quote()
Bulk_quote bq3;
cout << endl;
// calls Bulk_quote::operator=(const Bulk_quote&)
// calls Disc_quote::operator=(const Disc_quote&)
// calls Quote::operator=(const Quote&)
bq3 = bq2;
cout << endl;
// calls Bulk_quote()
// calls Disc_quote()
// calls Quote()
Bulk_quote bq4;
cout << endl;
// calls Bulk_quote::operator=(Bulk_quote&&)
// calls Disc_quote::operator=(Disc_quote&&)
// calls Quote::operator=(Quote&&)
bq4 = std::move(bq3);
cout << endl;
return 0;
}
// Note: one thing to say: every time we use move operation we must use std::move,
// because variable is lvalue; we cannot directly bind an rvalue reference to a
// variable even if this variable is an rvalue reference. If we forgot to use
// std::move, the variable would be regarded as a lvalue and the corresponding
// copy operation would substitute move operation.(review page 533 for more details)