经验首页 前端设计 程序设计 Java相关 移动开发 数据库/运维 软件/图像 大数据/云计算 其他经验
当前位置:技术经验 » 程序设计 » C++ » 查看文章
C++拷贝构造函数 的理解
来源:cnblogs  作者:二次元码  时间:2018/11/28 9:54:46  对本文有异议
  1. #include <iostream>
  2. using namespace std;
  3. //拷贝构造函数的理解
  4. class Point
  5. {
  6. public:
  7. Point();
  8. Point(int X, int Y);
  9. ~Point();
  10. Point(Point &p);
  11. void setPoint(int X, int Y)
  12. {
  13. x = X;
  14. y = Y;
  15. }
  16. public:
  17. int x, y;
  18. };
  19. Point::Point()
  20. {
  21. x = 0;
  22. y = 0;
  23. cout << "缺省样式的构造函数\n";
  24. }
  25. Point::Point(int X, int Y)
  26. {
  27. x = X;
  28. y = Y;
  29. cout << "正常构造\n";
  30. }
  31. Point::~Point()
  32. {
  33. cout << "点(" << x << "" << y << ")析构函数调用完毕\n";
  34. }
  35. Point::Point(Point &p)
  36. {
  37. x = p.x;
  38. y = p.y;
  39. cout << "拷贝构造函数\n";
  40. }
  41. void f(Point p)
  42. {
  43. cout << "函数f之中:" << endl;
  44. p.setPoint(p.x, p.y);
  45. }
  46. void f2(Point &p)
  47. {
  48. cout << "函数f之中:" << endl;
  49. p.setPoint(p.x, p.y);
  50. }
  51. Point g()
  52. {
  53. Point a(7, 33);
  54. cout << "函数g之中:" << endl;
  55. return a;
  56. }
  57. int main(void)
  58. {
  59. Point p1(10, 10);
  60. Point p2;
  61. f(p2);
  62. f2(p1);
  63. return 0;
  64. }
  65. /*总结:
  66. 1.对于f()函数的调用,首先要“调用拷贝构造函数”以实现从实参到形参的传递
  67. 相当于语句 “形参 = 实参”(p = p2),当函数类型为引用时,就不会调用拷贝构造函数。
  68. 引用相当于别名 不申请内存空间.
  69. 2.对于构造函数和析构函数的调用时一一对应的,即“先构造的后析构”类似于栈的“先进后出”原则。
  70. */

 

 
 友情链接:直通硅谷  点职佳  北美留学生论坛

本站QQ群:前端 618073944 | Java 606181507 | Python 626812652 | C/C++ 612253063 | 微信 634508462 | 苹果 692586424 | C#/.net 182808419 | PHP 305140648 | 运维 608723728

W3xue 的所有内容仅供测试,对任何法律问题及风险不承担任何责任。通过使用本站内容随之而来的风险与本站无关。
关于我们  |  意见建议  |  捐助我们  |  报错有奖  |  广告合作、友情链接(目前9元/月)请联系QQ:27243702 沸活量
皖ICP备17017327号-2 皖公网安备34020702000426号