构造函数
构造函数的定义
class 类名{
public:
类名();//构造函数
}
构造函数无返回类型也不需要写void
构造函数会自动调用,无定义时为空实现。因此需要我们定义构造函数进行数据的初始化
构造函数可以有参数也可以无参数,因此根据参数的类型构造函数可发生重载,且构造函数只能被调用一次。
构造函数可按有无参数分为有参构造函数和无参构造函数
构造函数按类型可分为普通构造函数和拷贝构造函数
构造函数 | 参数 | 类型 |
---|---|---|
一 | 无参构造函数 | 普通构造函数 |
二 | 有参构造函数 | 拷贝构造函数 |
注意
不要用拷贝构造函数进行初始化匿名对象
编译器会认为book(b2);等于book b2;会造成重定义
以下为调用构造函数的实例:
#include<iostream>
using namespace std;
class book
{
public:
book()
{
cout << "类的无参构造函数" << endl;
}
book(int a)
{
b = a;
cout << "类的有参构造函数" << b << endl;
}
book(const book& b)
{
cout << "类的拷贝构造函数" << b.b << endl;
}
int b;
};
void test()
{
//调用有三种方法调用
//括号法
book b1;
book b2(10);
book b3(b2);
//显示法
book b4;
book b5 = book(10);
book b6 = book(b5);
//隐式转换法
book b7 = 10;
book b8 = b7;
}
int main()
{
test();
return 0;
}
注意
- 括号法的第一个: book b1; 不要在b1后面加(),如果加了会造成二义性,编译器无法识别
- 构造函数的实例中的显示法的book(10)为匿名对象
析构函数
析构函数的定义
class 类名{
public:
~类名();//析构函数
}
析构函数与构造函数的区别
相同
都会自动调用
不同
- 在类名前加"~"
- 析构函数无返回值且无参数,因此不可发生重载
- 析构函数发生在对象的销毁时
析构函数主要用于数据的销毁工作
以下为调用析构函数的实例:
#include<iostream>
using namespace std;
class person
{
public:
~person()
{
cout << "类的析构函数" << endl;
}
};
void test()
{
person p1;
}
int main()
{
test();
person p2;
system("pause");
return 0;
}
注意:当运行到system("pause");时暂停,p2仍在main函数中,main函数为结束,因此p2为进行销毁,所以p2还未调用析构函数,当按任意键继续时main函数结束,p2内存回收,因此才会调用析构函数打印出信息。
评论 (0)