对象的初始化和清理
构造函数和析构函数,这两个函数会被编译器自动调用,完成对象初始化和清理工作。
构造函数:主要作用在于创造对象时为对象的成员赋值,构造函数有编译器自动调用,无须手动调用。
析构函数:主要作用在于对象销毁前系统自动调用,执行一些清理工作。
构造函数语法:类名(){}
1.没有返回值也不写void
2.函数名称与类名相同
3.构造函数可以有参数,因此可以发生重载
4.程序在调用对象时候会自动调用,无须手动调用,只调用一次
析构函数语法:~类名(){}
1.析构函数,没有返回值也不写void
2.函数名称与类名相同,在名称前面加符号~
3.析构函数不可以有参数值,因此不可以发生重载
4.程序在对象销毁前会自动调用析构,无需手动调用,只调用一次
构造函数的分类和调用
两种分类:
按参数分为:有参构造和无参构造
按类型分为:普通构造和拷贝构造
三种调用方式:
括号法
显示法
隐式转换法
```cpp
#include<iostream>
#include<string>
using namespace std;
class person
{
public:
person()
{
cout << "默认构造函数" << endl;
}
person(int a)
{
age = a;
cout << "参数构造函数" << endl;
}
//拷贝构造函数
//将传入的人身上的所有属性,拷贝到我身上
person(const person& p)
{
cout << "调用拷贝函数" << endl;
age = p.age;
}
~person()
{
cout << "调用析构函数" << endl;
}
void set_name()
{
string name;
cout << "输入名字: " << endl;
getline(cin, name);
cout << "输入年龄: " << endl;
cin >> age;
}
void show()
{
cout << name << " : " << age << endl;
}
private:
string name="xiaoming";
int age=1;
};
void test()
{
//调用默认构造函数时,不用加()
person p1;//调用无参构造函数
person p2(10);//调用有参构造函数
person p3(p2);
//显示法,调用
person p4 = person(40);
person p5 = person(p4);
person(50);
cout << "检测person(50),会不会杯系统立即回收" << endl;
p1.show();
p2.show();
p3.show();
p4.show();
p5.show();
}
int main()
{
//person p;
test();
//p.set_name();
//system("pause");
return 0;
}
输出结果:
默认构造函数
参数构造函数
调用拷贝函数
参数构造函数
调用拷贝函数
参数构造函数
调用析构函数
检测person(50),会不会杯系统立即回收
xiaoming : 1
xiaoming : 10
xiaoming : 10
xiaoming : 40
xiaoming : 40
调用析构函数
调用析构函数
调用析构函数
调用析构函数
调用析构函数
984

被折叠的 条评论
为什么被折叠?



