3、拷贝构造函数调用时机.cpp 1.4 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192
  1. //4、3、3 拷贝构造函数的调用时机
  2. //C++中拷贝构造函数调用时机通常有三种情况
  3. //⚪使用一个已经创建完毕的对象来初始化一个新对象
  4. //⚪值传递的方式给函数参数传值
  5. //⚪以值方式返回局部对象
  6. #include <iostream>
  7. #if(0)
  8. class Person
  9. {
  10. public:
  11. Person()
  12. {
  13. std::cout << "Person默认构造函数的调用" << std::endl;
  14. }
  15. Person(int age)
  16. {
  17. m_Age = age;
  18. std::cout << "Person有参构造函数的调用" << std::endl;
  19. }
  20. Person(const Person& p)
  21. {
  22. std::cout << "Person拷贝构造函数的调用" << std::endl;
  23. m_Age = p.m_Age;
  24. }
  25. ~Person()
  26. {
  27. std::cout << "Person默认析构函数的调用" << std::endl;
  28. }
  29. int m_Age;
  30. };
  31. //1、使用一个已经创建完毕的对象来初始化一个新对象
  32. void test01()
  33. {
  34. Person p1(20);
  35. Person p2(p1);
  36. std::cout << "P2的年龄为:" << p2.m_Age << std::endl;
  37. }
  38. //2、值传递的方式给函数参数传值
  39. void doWork(Person p)
  40. {
  41. }
  42. void test02()
  43. {
  44. Person p;
  45. doWork(p);
  46. }
  47. //3、以值方式返回局部对象
  48. Person doWork2()
  49. {
  50. Person p1;
  51. std::cout << (int*)&p1 << std::endl;
  52. return p1;
  53. }
  54. void test03()
  55. {
  56. Person p = doWork2();
  57. std::cout << (int*)&p << std::endl;
  58. }
  59. int main()
  60. {
  61. //test01();
  62. //test02();
  63. test03();
  64. system("pause");
  65. return 0;
  66. }
  67. #endif