class Person { Person() //构造 { } //可以重载和有参 ~Person() //析构 { } }
构造函数
与类名相同,不用写void
分类
参数分类:无参构造函数 有参构造函数
类型分类:普通构造函数 拷贝构造函数
#include <iostream> using namespace std; class Person { public: Person() //无参 {} Person(int a) //有参 {} Person(const Person& p) //拷贝 { age = p.age; } private: int age; } void test01() { //构造函数调用方式: 1括号法 Person p1(1); p1.age = 10 Person p2(p1); //拷贝p1 cout << p2.age << endl; // Person p3(); //编译器会认为这行是函数的声明 Person p3; //默认构造函数不要加() //构造函数调用方式: 2.显示法 Person p4 = Person(100); //右值为匿名对象, 匿名对象特定,如果编译器发现对象是匿名的,那么在这行代码结束后就释放这个对象 Person p5 = Person(p4); //不能用拷贝构造函数 初始化匿名对象 Person(p5); //如果这么写 相当于 Person p5; //隐式类型转换 Person p6 = 100; //相当于 Person p6 = Person(100) Person p7 = p6; //相当于 Person p7 = Person(p6) } int main() { }
拷贝构造函数调用时机
1.用已经创建好的对象来初始化新对象
void test01() { Person p1; p1.age = 10; Person p2(p1); //p1是创建好的对象 }
2.以值传递的方式给函数参数传值
void doWork(Person p1) //Person p1 = Person(p) { } void test02() { Person p; p.age = 10; doWork(p); }
3.以值方式返回局部对象
Person doWork2() { Person p1; return p1; //复制一个新的数据返回 } void test03() { Person p = doWork2(); }
Debug结果:
Release结果:
析构函数
类名前加~, 不可以重载,不可以有参数