标签搜索

类的构造函数与析构函数

mellowsky
2024-04-16 / 0 评论 / 10 阅读 / 正在检测是否收录...

构造析构
构造函数
构造函数的定义
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;
}

注意

  1. 括号法的第一个: book b1; 不要在b1后面加(),如果加了会造成二义性,编译器无法识别
  2. 构造函数的实例中的显示法的book(10)为匿名对象

析构函数
析构函数的定义
class 类名{
public:
~类名();//析构函数
}

析构函数与构造函数的区别

相同
都会自动调用
不同

  1. 在类名前加"~"
  2. 析构函数无返回值且无参数,因此不可发生重载
  3. 析构函数发生在对象的销毁时
  4. 析构函数主要用于数据的销毁工作

    以下为调用析构函数的实例:

#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

评论 (0)

取消