HM106 构造与析构

HM106 构造与析构

HM106 构造与析构

来源: 第 106 集 类和对象-对象特性-构造函数和析构函数

难度: 入门

时间限制: 1s

空间限制: 64MB

题目描述

对象要有初始化和清理,对应生活中的出厂设置和删除隐私数据。C++ 用**构造函数**做初始化,用**析构函数**做清理。这两个函数由编译器自动调用,不必也不应手写调用。自己不提供时,编译器会提供空实现(函数体一行代码都没有);自己写了就用自己的。

构造函数语法:

  • 没有返回值,连 void 也不写;
  • 函数名与类名相同;
  • 可以有参数,因此可以重载;
  • 创建对象时自动调用,而且只调用一次。
  • 要让类外创建对象时能调到它,应放在 public 下。

析构函数语法:

  • 没有返回值,连 void 也不写;
  • 函数名与类名相同,前面加波浪号 ~
  • 不可以有参数,因此不能重载;
  • 对象销毁前自动调用,而且只调用一次。

栈上的局部对象在所在函数结束时销毁,因此会立刻看到析构。写在 main 里的对象要等整个 main 结束才销毁,析构发生在程序收尾。

请设计 Person 类,提供无参构造和带姓名的有参构造(重载),以及无参析构。处理 \(q\) 次操作:

  • F:在独立测试函数里创建一个无参 Person。该函数结束时对象销毁。输出一行 CTOR,再输出一行 DTOR
  • N:在 main 里创建一个无参 Person,立刻输出 CTOR。这个对象留到程序结束再析构。
  • S name:在 main 里用有参构造创建一个 Person,立刻输出 CTOR name。同样留到程序结束再析构。

全部操作处理完后,按**后创建的先销毁**的顺序,为仍留在 main 里的对象输出析构:无参对象输出 DTOR,有参对象输出 DTOR name

输入格式

第一行一个整数 \(q\)(\(1 \le q \le 1000\))。

接下来 \(q\) 行,格式见上。name 不含空白,长度 \(1\sim 20\)。

输出格式

按构造 / 析构发生的顺序列出,每行一次,行末换行。

样例

输入 #1

2
F
N

输出 #1

CTOR
DTOR
CTOR
DTOR

输入 #2

3
N
S Zhang
F

输出 #2

CTOR
CTOR Zhang
CTOR
DTOR
DTOR Zhang
DTOR

说明

  • F 对应局部对象:测试函数一结束就析构。
  • N / S 对应 main 里的对象:先只看到构造,程序结束才析构。
  • 样例 #2:先在 main 里建两个对象,再进测试函数;测试函数的对象先析构,然后 Zhang,最后最先那个无参对象。
  • 不要在代码里手动调用构造或析构;创建对象和离开作用域时由编译器自动调用。
  • 析构函数不能写参数。

信息

ID
1105
难度
(无)
分类
(无)
标签
(无)
递交数
0
已通过
0
通过率
?
上传者