C++ //构造函数的分类及调用 //分类 // 按照参数分类 无参构造函数(默认构造) 有参构造函数 //按照类型分类 普通构造 拷贝构造

 1 //构造函数的分类及调用
 2 //分类
 3 // 按照参数分类    无参构造函数(默认构造)   有参构造函数
 4 //按照类型分类     普通构造   拷贝构造
 5 
 6 #include <iostream>
 7 using namespace std;
 8 
 9 //1.构造函数的分类及调用
10 //分类
11 class Person
12 {
13 public:
14     //构造函数
15     Person()
16     {
17         cout << "Person无参的构造函数调用 " << endl;
18     }
19     
20     Person(int a)  //p2的参数 
21     {
22         age = a;
23         cout << "Person有参的构造函数调用 " << endl;
24     }
25     //拷贝构造函数
26 
27     Person(const Person &p)   
28     {
29         //将传入的人身上所有的属性,拷贝我身上
30         age = p.age;
31         cout << "Person拷贝的构造函数调用 " << endl;
32     }
33 
34 
35 
36     //析构函数
37     ~Person()
38     {
39         cout << "Person的析构函数调用" << endl;
40     }
41     int age;
42 
43 };
44 
45 //调用
46 void test01()
47 {
48     //1.括号法
49     Person p;   //默认构造函数调用 无参数
50     Person p2(10);    //有参函数
51 
52     //拷贝构造函数
53     Person p3(p2);
54 
55     //Person p1();   //因为下面这行代码,编译器会认为是一个函数的声名
56                      //不会认为在创建对象
57     //注意:
58     //调用默认构造函数时候,不要加()
59     cout << "括号法-P2的年龄为: " << p2.age << endl;
60     cout << "括号法-P3的年龄为: " << p3.age << endl;
61 
62     //2.显示法
63     Person p4;
64     Person p5 = Person(10); //有参构造
65     //拷贝构造
66     Person p6 = Person(p5);
67 
68     //Person(10);  //匿名对象 特点: 当前行执行后,系统会立即回收匿名对象
69     //cout << "aaaaaaa"<<endl;
70 
71 
72     //注意:
73     //不要利用拷贝构造函数 初始化匿名对象
74     //编译器会认为 Person(p6) === Person p6;对象声名 重定义
75     //Person(p6);
76 
77     //3.隐式转换法
78 
79     Person p7 = 10; //相当于 Person p7 = Person(10);
80     Person P8 = p7;  //拷贝构造  
81 }
82 
83 int main()
84 {
85     test01();
86 
87     system("pause");
88 
89 }

 

posted on 2021-08-06 11:13  Bytezero!  阅读(71)  评论(0编辑  收藏  举报