类和对象(2):构造函数,析构函数

简介: 类和对象(2):构造函数,析构函数

一、构造函数

1.1 概念

构造函数是一种特殊的成员函数,名字与类名相同创建类类型对象时编译器自动调用——初始化对象,在对象整个生命周期内只调用一次。

PS: 1. 构造函数无返回值;2. 构造函数支持重载

class Date
{
public:    
    Date() // 1. 无参构造函数
    {
        _year = 1;
        _month = 1;
        _day = 1;
    }
    Date(int year, int month, int day) // 2. 带参构造函数
    {
        _year = year;
        _month = month;
        _day = day;
    }
private:   
    int _year;
    int _month;
    int _day;
};
int main()
{
    Date d1; // 调用无参构造函数
    Date d2(2013, 2, 22); // 调用带参构造函数
    // Date d3(); // warning C4930: “Date d3(void)”: 未调用原型函数(是否是有意用变量定义的?)
    // 与函数声明无法区分
    return 0;
}
1.2 默认构造函数

默认构造函数,指可以不传参就直接调用的构造函数。

三类:
  1. 类中没有显示定义构造函数,C++编译器会自动生成一个无参的默认构造函数。

  1. 无参构造函数
  2. 全缺省
class Date
{
public:
    // 2. 全缺省构造函数
    Date(int year = 2, int month = 2, int day = 2)
    {
        _year = 2;
        _month = 2;
        _day = 2;
    }
private: 
    // 1. C++11支持在声明时给缺省值
    int _year = 1;
    int _month = 1;
    int _day = 1;
};

PS:

  1. 一旦用户显示定义构造函数,则编译器不再自动生成

  1. 默认构造函数只能有一个

二、析构函数

2.1 概念

析构函数不是对对象本身进行销毁(局部变量的销毁由编译器完成),对象在销毁时会自动调用析构函数,完成对象中资源清理的工作

  1. 析构函数名为类名前加上~
  2. 无参数无返回值
  3. 一个类只能有一个析构函数;若未显示定义,系统会生成默认的析构函数;析构函数不支持重载
  4. 对象生命周期结束,系统自动调用析构函数。
#include <iostream>
using namespace std;
class Stack
{
public:
    Stack(int capacity = 3)
    {
        _a = (int*)malloc(sizeof(int) * capacity);
        if (nullptr == _a)
        {
            perror("malloc");
        }
        _capacity = capacity;
        _top = 0;
    }
    ~Stack()
    {
        free(_a);
        _top = _capacity = 0;
        _a = nullptr;
  }
private:
    int* _a;
    int _capacity;
    int _top;
};

PS: 如果类中没有申请资源,析构函数可以不写,使用编译器生成的默认析构,如:Date类;有资源申请时,一定要写,否则会造成资源泄露,如:Stack类。

相关文章
|
7月前
|
编译器 C++
【C++】类和对象(中)之构造函数与析构函数
【C++】类和对象(中)之构造函数与析构函数
33 0
|
8月前
|
编译器 C++
C++类与对象 - 2(构造函数和析构函数)(超详细)
C++类与对象 - 2(构造函数和析构函数)(超详细)
46 0
|
26天前
|
安全 编译器 C语言
类与对象\构造函数与析构函数
类与对象\构造函数与析构函数
12 1
|
2月前
|
C++ Linux
|
2月前
|
编译器 C++
【C++类和对象】构造函数与析构函数
【C++类和对象】构造函数与析构函数
【C++类和对象】构造函数与析构函数
|
2月前
|
存储 编译器 对象存储
【C++】类与对象(构造函数、析构函数、拷贝构造函数、常引用)
【C++】类与对象(构造函数、析构函数、拷贝构造函数、常引用)
15 0
|
2月前
|
编译器 C语言 C++
【c++】类和对象(三)构造函数和析构函数
朋友们大家好,本篇文章我们带来类和对象重要的部分,构造函数和析构函数
|
2月前
|
存储 编译器 C语言
【C++】类和对象之构造函数、析构函数、拷贝构造函数(二)
【C++】类和对象之构造函数、析构函数、拷贝构造函数(二)
|
2月前
|
编译器 C++
C++——类和对象(构造函数与析构函数)
C++——类和对象(构造函数与析构函数)
|
7月前
|
存储 编译器 C++
【C++初阶】类和对象——构造函数&&析构函数&&拷贝构造函数
上篇文章我们对于C++中的类有了初步的认识和了解,在最后通过日期类的类型对于this指针有了一定的了解,今天我们继续深入C++类和对象的了解!!!