问答题
(以下试题六至试题八任选一题)
阅读下列说明和C++代码,请回答问题1至问题3。
【说明】
已知下列程序运行时的输出应为:
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(iht 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)Stock():shares(1),share_val(1)
或Stock():share_val(1),shares(1)
(2)cout
问答题
【问题2】
类Stock的定义中有两处错误,请指出错误所在行号并给出该行修改后的完整结果。 |
【正确答案】
【答案解析】错误1 第4行,修改为:public:
错误2 第9行,修改为:~Stock(){}
【正确答案】
【答案解析】否,或不存在内存泄漏
[分析] 已知程序的输出全部为1,根据主程序中Stock b;这一语句可以判断出:类Stock有默认的构造函数,且该构造函数将初始化类中的一些成员变量。所以(1)处应该填写的内容为Stock的构造函数,因为该构造函数的函数体内没有语句,所以只能采用初始化列表的方式对成员变量进行初始化。成员函数output输出成员变量的值,因此(2)处应该填写标准的输出cout。
由于类至少需要一个共有的构造函数,因此,第4行的protected应该更改为public:,而析构函数不能有返回类型,因此第9行应该去掉void。
main函数中对类的使用没有通过new操作符生成stock类的对象,因此不存在内存泄露,并且main函数中三种对象的生成方式是等价的。