标签:完成 amp ++ 构造 使用 定义 const iostream new
练习13.1
如果一个构造函数的第一个参数是自身类类型的引用,且任何额外参数都有默认值,则此构造函数是拷贝构造函数;拷贝初始化通常使用拷贝构造函数来完成。拷贝构造函数被用来初始化非引用类类型参数;
练习13.2
拷贝构造函数自己的参数必须是引用类型。如果其参数不是引用类型,则调用永远也不会成功-为了调用拷贝构造函数,我们必须拷贝他的实参,但为了拷贝实参,我们又需要调用拷贝构造函数,如此无限循环;
练习13.3
如果我们没有定义自己的拷贝构造函数,则会调用编译器为我们合成的拷贝构造函数
练习13.4
1 Point foo_bar(Point arg){ ① 2 Point local = arg; ② 3 Point *heap = new Point(global); ③ 4 *heap = local; 5 Point pa[4] = {local④, *heap⑤}; 6 return *heap;⑥ 7 }
注意拷贝构造函数和拷贝赋值运算符不是一回事;
练习13.5
1 #include <iostream> 2 #include <string> 3 #include <memory> 4 5 using namespace std; 6 7 8 class HasPtr { 9 friend ostream &print(ostream &os, HasPtr &h); 10 public: 11 HasPtr(const string &s = string()) : ps(new string(s)), i(0) {} 12 HasPtr(const HasPtr &ptr); 13 private: 14 string *ps; 15 int i; 16 }; 17 18 ostream &print(ostream &os, HasPtr &h); 19 20 int main() 21 { 22 HasPtr has("hello"); 23 HasPtr have(has); 24 print(cout, have); 25 system("pause"); 26 return 0; 27 } 28 29 HasPtr::HasPtr(const HasPtr & ptr) : ps(new string(*(ptr.ps))),i(ptr.i) {} 30 31 ostream & print(ostream & os, HasPtr & h) 32 { 33 os << *h.ps << h.i << endl; 34 return os; 35 // TODO: 在此处插入 return 语句 36 }
标签:完成 amp ++ 构造 使用 定义 const iostream new
原文地址:http://www.cnblogs.com/wuyinfenghappy/p/7460104.html