问答题
[说明]
已知以下C++程序运行时的输出结果如下。
1:1
1:1
1:1
[C++程序]
01 #include <iostream>
02 using namespace std;
03 class Stock
04 protect:
05
(1) ;
06 Stock(int n, int pr=1)
07 shares = n; share_val=pr;
08 ;
09 void ~Stock() ;
10 public:
11 //成员函数
12 void output()
13
(2) << 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. [问题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”。
【答案解析】
【正确答案】由于类至少需要一个共有的构造函数,因此[C++程序]类Stock的定义中,第4行的“protected”应该更改为“public”。
因为析构函数不能有返回类型,所以[C++程序]中第9行应该去掉“void”。
【答案解析】
【正确答案】由于main函数中对类的使用没有通过new操作符生成stock类的对象,因此小存在内存泄露,并且 main函数中3种对象的生成方式是等价的。
【答案解析】