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
- 通过率
- ?
- 上传者