问答题
阅读以下应用说明、图和C++代码,根据要求回答问题1至问题3。
[说明]
已知以下C++程序运行时的输出结果如下。
1:1
1:1
1:1
[C++程序]
01 #include <iostream>
02 using namespace std;
03 class Stock{
04 protect:
05 {{U}} (1) {{/U}}{ };
06 Stock(int n, int pr=1) {
07 shares = n; share_val=pr;
08 };
09 void ~Stock() { };
10 public:
11 //成员函数
12 void output() {
13 {{U}} (2) {{/U}} << shares << ":" << share_val << endl;
14 }
15 private:
16 //成员变量
17 int shares;
18 int share_val;
19 };
20
21 void main() {
22 Stock a(1); a.output
23 Stock b; b.output
24 Stock c = Stock (); c.output
25 }
问答题
[问题1]
请根据C++程序运行时的输出结果,将代码中(1)、(2)空缺处的内容补充完整。
【正确答案】
【答案解析】由题干的说明可知,程序的输出全部为1。根据主程序main()中语句“Stock b;”可以判断出:类Stock有默认的构造函数,且该构造函数将初始化类中的一些成员变量。因此(1)空缺处所填写的内容为Stock的构造函数,即“Stock():shares(1),share_val(1)”或“Stock():share_val(1),shares(1)”。 由于该Stock构造函数的函数体内没有语句,因此只能采用初始化列表的方式对成员变量进行初始化。成员函数output输出成员变量的值,即(2)空缺处所补充的内容是“cout”。
问答题
[问题2]
类Stock的定义中有两处错误,请指出错误所在行号并给出该行修改后的完整结果。
【正确答案】
【答案解析】由于类至少需要一个共有的构造函数,因此[C++程序]类Stock的定义中,第4行的“protected”应该更改为“public”。 因为析构函数不能有返回类型,所以[C++程序]中第9行应该去掉“void”。
问答题
[问题3]
指出该代码是否存在内存泄漏。
【正确答案】
【答案解析】由于main函数中对类的使用没有通过new操作符生成stock类的对象,因此小存在内存泄露,并且 main函数中3种对象的生成方式是等价的。