文章目录
对象的构造和析构
创建一个对象时,需要做某些初始化工作,例如,对数据成员赋值。
类的数据成员不能再声明类的时候初始化
为了解决这个问题,C++编译器提供了构造函数来处理对象的初始化。
构造和析构函数
1. 定义及调用
1.1 有关构造函数
定义:
- C++中类可以定义与类名相同的特殊成员函数,这种与类名相同的成员函数叫析构函数
- 构造函数在定义时可以有参数
- 没有任何返回类型的声明
调用:
4. 自动调用:一般情况下C++编译器会自动调用构造函数
5. 手动调用:一些情况下需要自己手工调用构造函数
1.2有关析构函数
定义:
- C++中类可以定义一个特殊的成员函数清理对象,这个特殊的成员函数叫做析构函数
- 语法:
~ClassName() - 析构函数也没有参数和返回类型的声明
- 析构函数在对象销毁时自动被调用
#include<iostream>
using namespace std;
class Test
{
public:
Test()//无参数,无返回类型,构造函数
{
cout << "调用构造函数" << endl;
}
~Test()//无参数,无返回类型,析构函数
{
cout << "调用析构函数" << endl;
}
};
int main()
{
Test t1;
return 0;
}
2. 构造函数的分类及调用
有参构造函数的三种调用方法:
- 括号法 C++编译器自动调用的构造函数
- 等号法 C++编译器自动调用的构造函数
- 直接调用构造函数 手动调用构造函数
#include<iostream>
using namespace std;
class Test
{
private:
int m_a;
int m_b;
public:
Test()//1 无参构造函数
{
m_a = 0;
m_b = 0;
cout << "调用无参构造函数" << endl;
}
Test(int a , int b )//2 调用有参构造函数 有三种方法
{
m_a = a;
m_b = b;
cout << "调用有两个参数的构造函数" << endl;
}
Test(int a)
{
m_a = a;
m_b = 0;
cout << "调用一个参数的构造函数" << endl;
}
Test(const Test&object)//3
{
cout << "调用拷贝构造函数" << endl;
}
void prinT()
{
cout << "调用普通成员函数 \n" << endl;
}
};
int main()
{
Test t0;//调用无参构造函数
//调用有参构造函数
//①括号法 C++编译器自动调用的构造函数
cout << "①括号法:" << endl;
Test t1(1,2);
t1.prinT();
cout << "②等号法:" << endl;
//②等号法 C++编译器自动调用的构造函数
//括号里的是逗号表达式,只输出逗号的最后一个值
//C++对等号的功能的增强
Test t2 = (1, 2,3,4,5);
Test t3 = 5;
cout << endl;
cout << "③直接调用构造函数:" << endl;
//③直接调用构造函数 手动调用构造函数
Test t4 = Test(1, 2);//t4对象的初始化
return 0;
}
3.为什么需要构造函数和析构函数
#include<iostream>
using namespace std;
class Test
{
private:
int m_a;
int m_b;
public:
//显式初始化
void init(int a, int b)
{