构造函数与析构函数

构造函数与析构函数,第1张

Hello,友友们,我是你们的好朋友一一,今天一一想给大家分享一点关于构造函数和析构函数的知识点,欢迎大家批评指正!

 

1.初始化和清理       

        大家在购买一台电脑或者手机,或者其他的产品,这些产品都有一个初始设置,也就是这些产品对被创建的时候会有一个基础属性值。那么随着我们使用手机和电脑的时间越来越久,那么电脑和手机会慢慢被我们手动创建很多文件数据,某一天我们不用手机或电脑了,那么我们应该将电脑或手机中我们增加的数据删除掉,保护自己的信息数据。

       从这样的过程中,我们体会一下,所有的事物在起初的时候都应该有个初始状态,当这个事物完成其使命时,应该及时清除外界作用于上面的一些信息数据。

        那么在我们c++中具体来说,当我们创建对象的时候,这个对象应该有一个初始状态,当对象销毁之前应该销毁自己创建的一些数据。

        对象的初始化和清理也是两个非常重要的安全问题,一个对象或者变量没有初始时,对其使用后果是未知,同样的使用完一个变量,没有及时清理,也会造成一定的安全问题。c++为了给我们提供这种问题的解决方案,构造函数和析构函数,这两个函数将会被编译器自动调用,完成对象初始化和对象清理工作。

        无论你是否喜欢,对象的初始化和清理工作是编译器强制我们要做的事情,即使你不提供初始化 *** 作和清理 *** 作,编译器也会给你增加默认的 *** 作,只是这个默认初始化 *** 作不会做任何事,所以编写类就应该顺便提供初始化函数。

        为什么初始化 *** 作是自动调用而不是手动调用?既然是必须 *** 作,那么自动调用会更好,如果靠程序员自觉,那么就会存在遗漏初始化的情况出现。

2.构造函数和析构函数

        构造函数主要作用在于创建对象时为对象的成员属性赋值,构造函数由编译器自动调用,无须手动调用。

        析构函数主要用于对象销毁前系统自动调用,执行一些清理工作。

//构造函数: 没有返回值,不用写void,函数名与类名相同,可以有参数,可发生重载,由编译器自动调用,不用手动调用。
//析构函数: 没有返回值,不用写void,函数名与类名相同,函数名前面加~,不可以有参数,不可发生重载,由编译器自动调用,不用手动调用。
 

#include
using namespace std;

//基本用法
class Person
{
    Person()
    {
        cout << "构造函数调用" << endl;

    }
    
    ~Person()
    {
        cout << "析构函数调用" << endl;
    }
};

void test(){};

int main()
{
    test();
    return 0;
}
//举例
class Person
{
public:
    Person()
    {
        cout << "构造函数调用" << endl;
        pname = (char*)malloc(sizeof("John"));
        strcpy(pname, "John");
        mtall = 188;
        mmoney = 200;
    }

    ~Person()
    {
        cout << "析构函数调用" << endl;
        if (pname != NULL)
        {
            free(pname);
            pname = NULL;
        }
    }
public:
    char* pname;
    int mtall;
    int mmoney;

};

void test()
{
    Person P;
    cout << P.pname << P.mtall <
3.构造函数的分类及调用
  1. 按参数类型:分为无参构造函数和有参构造函数
  2. 按类型分类:普通构造函数和拷贝构造函数(复制构造函数)
    class Person
    {
    public:
    	Person() //无参构造函数
    	{
    		cout << "无参构造函数"<
    						

    欢迎分享,转载请注明来源:内存溢出

    原文地址: http://outofmemory.cn/langs/716904.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-04-25
下一篇 2022-04-25

发表评论

登录后才能评论

评论列表(0条)