1、构造函数进行初始化操作
? ? ?没有返回值 不用写void ? ? 函数名与类名相同 ? ? 构造函数可以有参数 可以发生重载 ? ? 创建对象的时候 构造函数会自动调用 而且只调用一次
2、析构函数 进行清理操作 ? ? 没有返回值 不用写void ?? ?函数名与类名相同 在名称前加上一个~ ?? ?析构函数不可以有参数 不可以发生重载 ?? ?对象在销毁前 ?会自动调用析构函数 而且只会调用一次
#include <iostream>
using namespace std;
class Person
{
public:
Person()
{
cout << "你好" << endl;
}
~Person()
{
cout << "Hello" << endl;
}
};
void test1()
{
Person p1;//这个事件创建在栈上的数据 test1执行完成之后 就会释放这个对象
}
int main()
{
test1();
return 0;
}
构造和析构都是必须要实现的 如果我们自己不提供 编译器会提供一个空实现的构造和析构
三中调用方法:
void test2()
{
//1、括号法
//Person P1;//默认无参构造函数调用
//Person P2(10);//有参构造函数
//Person P3(P2);//拷贝构造函数
//cout << "P2的年龄为:" <<P2.age<< endl;
//cout << "P2的年龄为:" << P3.age << endl;
//注意事项
//调用默认构造函数时 不要加() 因为下面这行代码 编译器会认为这是一个函数的声明 不会认为在创建对象
//
//2、显示法
Person P1;//默认无参构造函数调用
Person P2 = Person(10);//有参构造函数
Person P3 = Person(P2);//拷贝构造函数
cout << "P2的年龄为:" << P2.age << endl;
cout << "P2的年龄为:" << P3.age << endl;
Person(10);//匿名对象 当执行结束后 系统会立即回收掉匿名对象
//注意事项
//不要利用拷贝构造函数 初始化匿名对象 编译器会认为 Person(P3) === Person P3;
Person(P3);
//3、隐式转化法
//Person P4 = 10; //相当于 写 Person P4 = Person(10); 有参构造
//Person P5 = P4; //拷贝构造
}
|