类和对象中-构造与析构


前言

提示:本章内容将是我们学习C++的第一个难点:

本篇我们将围绕C++的6个默认成员函数进行详细的讲解,这部分知识相对较碎,需要大家用心才能学得扎实。
Tips:因篇幅有限,我们将先学习较为基础的两个默认成员函数:构造函数、析构函数。


提示:以下是本篇文章正文内容,下面案例可供参考

一、默认成员函数是什么?

默认成员函数是我们用户自己没有显示实现(简单讲就是没有自己实现、自己定义这些函数的功能)。一个类,我们不自己去显示实现的情况下编译器会默认生成一下6个默认成员函数,但是只有前四个比较重要。以下是其核心的学习方法:

1.我们不写时,编译器默认生成的函数行为是什么,是否满足我们的需求
2.编译器默认生成额函数不满足我们的需求,我们需要自己实现,那么如何自己实现才能满足我们的需求?

在这里插入图片描述

二、构造函数与析构函数

——在正式引入构造与析构之前,我们先来思考为什么祖师爷要在类的成员函数中要默认这两个函数的存在。我上面的图表明了这两个函数的作用,构造的作用是完全初始化(注意:变量初始化跟变量定义是不同的,前者是对变量的一个初始的赋值操作,后者是创建这个变量),析构的作用是完成清理的工作。
——默认的意思就是自己会调用,说直接了点就是这两个会自动调用,这个非常重要。
——现在我们来想为什么一定要有这两个函数。因为一个变量定义完,我们有时候会忘记对其初始化,所以编译器会自动生成一个构造函数供我们使用,但是编译器也不是万能的,编译器自己为我们的变量进行初始化的时候,有时可能不会满足我们的需求,所以就要我们自己实现;析构也是一样的道理。

1.构造函数

构造函数虽然叫构造,但是构造函数的主要任务并不是开空间创建对象,而是对象实例化时初始化对象,构造函数本身是要替代我们以前Stack和Date中的Init功能,构造函数的自动调用特点就完美替代了Init。

语法规则

  1. 函数名和类名相同
  2. 无返回值(不用写返回值)
  3. 对象实例化自动调用对应的构造函数(自己给你初始化)
  4. 构造函数可以重载(因为我们生成的变量可能需要不同的初始化方式)
  5. 如果我们没有自己写构造函数,编译器会为我们自己生成一个构造函数,一旦我们显式定义,编译器生成的将不会产生
  6. 默认成员函数有三种:编译器自己生成的,无参构造函数,全缺省构造函数(这点比较易混)
  7. 我们不写,编译器自动生成的构造函数对我们的内置类型(int,double,指针之类),对它们的初始化时不确定的;对于自定义类型(class,struct定义的类型)会调用它们对应的构造函数

讲了这么多,我们得先上代码让大家了解一下,我们先写一个无参的构造函数

class Date
{
   
   
public://我们显示定义了一个无参的构造函数
     Date()//1.构造函数的名字与类的名字相同2.无需任何返回值
     {
   
   
        _year = 1;//相当于this->year = 1
        _month = 1;
        _day = 1;
     }
     void Print()
     {
   
   
        cout<<_year<<"/"<<_month<<"/"<<_day<<endl;
     }
private:
     int _year;
     int _month;
     int _day;
};
int main<
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值