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