//构造函数和析构函数,编译器自动调用。
//构造函数,不需要返回值,无需void和类名相同,可以写参数。可以发生重载; 编译器自动调用,只调用一次。
//析构函数,名称与类名相同,析构函数不可以有参数。不能发生重载。在函数名前面加~.对象销毁前编译器自动调用。只调用一次。
class Person {
public :
Person() {
cout << "Person 无参(默认构造函数)构造函数执行。" << endl;
}
Person(int x) {
cout << "Person 有参构造函数执行。" << endl;
}
//拷贝构造函数,必须是const 以及引用的方式传递。
Person(const Person &p) {
//将传入的人的属性,copy到当前对象的身上。
cout << "Person 拷贝构造函数执行。" << endl;
}
~Person() {
cout << "Person 析构函数执行。" << endl;
}
};
void test() {
/**
* 括号法初始化对象。
*/
//Person p;
// Person p();//这个不是调用默认构造函数,作为函数声明来使用。不能用括号法来创建对象。
Person p1(1);//通过括号进行赋值。
Person p2(p1);//copy 构造函数
/**
* 显示初始化方法。
*/
//Person p = Person();
Person p21 = Person(10);//有参构造函数。右边的叫做匿名对象,当前行执行结束后,系统会立即回收掉对象。
Person p31 = Person(p21);//copy 构造函数。
/**
* 隐示转换
*/
Person p4 = 10; //又参构造
Person p5 = p4;//这是拷贝构造函数。
}
int main() {
test();
return 0;
}