標籤:相關 cout 建立 ace std logs 程式設計 turn 個人
練習13.18
1 #include <iostream> 2 #include <string> 3 #include <memory> 4 5 using namespace std; 6 7 static int i = 0; 8 9 class Employee {10 friend ostream& print(ostream& os, const Employee& emp);11 public:12 Employee() : empNames("周杰倫"), empNo(i++) {}13 Employee(const string &name) : empNames(name), empNo(i++) {}14 private:15 string empNames;16 int empNo;17 };18 19 ostream& print(ostream& os, const Employee& emp);20 21 int main()22 {23 Employee e1;24 print(cout, e1);25 Employee e2("吳亦凡");26 print(cout, e2);27 Employee e3("潘瑋柏");28 print(cout, e3);29 system("pause");30 return 0;31 }32 33 ostream & print(ostream & os, const Employee & emp)34 {35 os << "name: " << emp.empNames << " ID: " << emp.empNo << endl;36 return os;37 // TODO: 在此處插入 return 語句38 }
練習13.19
需要,如果採用合成的拷貝控制,那麼拷貝就是被拷貝成員的值,如果出現同名情況,就無法通過ID分辨兩個人。
1 #include <iostream> 2 #include <string> 3 #include <memory> 4 5 using namespace std; 6 7 static int i = 0; 8 9 class Employee {10 friend ostream& print(ostream& os, const Employee& emp);11 public:12 Employee() : empNames("周杰倫"), empNo(i++) {}13 Employee(const string &name) : empNames(name), empNo(i++) {}14 Employee(const Employee& emp) : empNames(emp.empNames), empNo(i++) {}15 Employee &operator=(const Employee &emp);16 private:17 string empNames;18 int empNo;19 };20 21 ostream& print(ostream& os, const Employee& emp);22 23 int main()24 {25 Employee e1;26 print(cout, e1);27 Employee e2("吳亦凡");28 print(cout, e2);29 Employee e3(e2);30 print(cout, e3);31 Employee e4 = e1;32 print(cout, e4);33 system("pause");34 return 0;35 }36 37 ostream & print(ostream & os, const Employee & emp)38 {39 os << "name: " << emp.empNames << " ID: " << emp.empNo << endl;40 return os;41 // TODO: 在此處插入 return 語句42 }43 44 Employee & Employee::operator=(const Employee & emp)45 {46 empNames = emp.empNames;47 empNo = i++;48 return *this;49 // TODO: 在此處插入 return 語句50 }
練習13.20
由於我們沒有給這兩個類定義拷貝控制,所以一般情況下是編譯器自己合成相關的拷貝控制,因為我們沒有在這兩個類中定義不可能拷貝、賦值或銷毀類的成員,所以該類使用合成的,反之其合成的拷貝控製成員被定義為刪除的。
練習13.21
在我看來這兩個類也是沒有必要去定義其拷貝控製成員的。
這兩個類是配合使用對文本進行查詢的,在程式設計的角度,拷貝操作沒有必要。
對於不同的文本,或者不同的流只需要新建立類對象就可以了,無需複製操作。
C++primer 13.1.6節練習