C++之构造函数
构造函数
一、构造函数的分类
按照参数分类:有参和无参(默认)构造函数
Person()
按照类型分类:默认构造函数和拷贝构造函数
Person(const Person &p)
注意事项:拷贝构造函数不能传匿名的对象作为参数。【这是因为匿名的对象在执行完这一行后,对象就会被释放了】 引用的本质也是使用了指针, 这就意味着指针指向的地址空间被释放了。所以不能使用匿名的对象作为拷贝构造函数的参数。
无参的构造函数的调用不需要加括号,加上括号后容易发生歧义(函数的声明歧义)。如Person p();
完全可以认为是函数的声明语法。
二、拷贝构造函数的调用时机
Person(const Person &p){ // 如果这里不加&符号,赋值的时候就会开辟新的内存,赋值的过程中又会调用默认的拷贝构造,进入了死循环过程
cout << "拷贝构造函数的调用" <<endl;
}
// 拷贝构造函数调用的时机
// 1. 用已经创建好的对象来初始化新的对象
void test01()
{
Person p1 ;
p1.m_Age = 10;
Person p2(p1);
}
// 2.以值传递的方式给函数的参数传值
void doWork(Person p1){ // Person p1 = Person(p)
}