1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495969798 |
- //4.2.2 构造函数的分类及调用
- //两种分类方式:
- //按参数分为:有参构造和无参构造
- //按类型分类:普通构造和拷贝构造
- //三种调用方式
- //括号法
- //显示法
- //隐式转换法
- //示例
- //1、构造函数分类
- //按照参数分类分为 有参和无参构造 无参(默认构造)又称为默认构造函数
- //按照类型分类分为 普通构造和拷贝构造
- #if(0)
- #include <iostream>
- 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
|