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 }
本文来自博客园,作者:Bytezero!,转载请注明原文链接:https://www.cnblogs.com/Bytezero/p/15107705.html