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

编程入门 行业动态 更新时间:2024-10-27 03:38:36

类和对象(2):构造<a href=https://www.elefans.com/category/jswz/34/1771370.html style=函数,析构函数"/>

类和对象(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类。

更多推荐

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

本文发布于:2023-11-15 08:10:42,感谢您对本站的认可!
本文链接:https://www.elefans.com/category/jswz/34/1596462.html
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
本文标签:函数   对象

发布评论

评论列表 (有 0 条评论)
草根站长

>www.elefans.com

编程频道|电子爱好者 - 技术资讯及电子产品介绍!