//4.2.2 构造函数的分类及调用 //两种分类方式: //按参数分为:有参构造和无参构造 //按类型分类:普通构造和拷贝构造 //三种调用方式 //括号法 //显示法 //隐式转换法 //示例 //1、构造函数分类 //按照参数分类分为 有参和无参构造 无参(默认构造)又称为默认构造函数 //按照类型分类分为 普通构造和拷贝构造 #if(0) #include class Person { public: //构造函数 Person() { std::cout << "Person的无参构造函数调用" << std::endl; } Person(int a) { age = a; std::cout << "Person的有参构造函数调用" << std::endl; } //拷贝构造函数 Person(const Person& p) { //将传入的人身上的所有属性拷贝到我身上 age = p.age; } //析构函数 ~Person() { std::cout << "Person的析构函数调用" << std::endl; } int age; }; //调用 void test01() { //1、括号法: //Person p1; //默认构造函数调用 //Person p2(10); //有参构造函数 //Person p3(p2); //拷贝构造函数 //注意事项: //调用默认无参的构造函数时不要加() //Person p1() 编译器会认为是一个函数的声明,不会认为在创建对象 Person p1(); //std::cout << "p2的年龄为:" << p2.age << std::endl; //std::cout << "p3的年龄为:" << p3.age << std::endl; //2、显示法: Person p1; Person p2 = Person(10); //会调用有参构造 Person p3 = Person(p2); //拷贝法构造 Person(10); //匿名对象 特点 :当前执行结束后,系统会立即回收掉匿名对象 //注意事项 : Person(p3); //对向声明 //不要利用拷贝构造函数 初始化匿名函数对象 编译器会认为Person(p3) === Person p3; //3、隐式转换法: Person p4 = 10; //相当于 写了 Person p4 = Person(10); 有参构造 } int main() { test01(); system("pause"); return 0; } #endif