问题 问答题

(以下试题六至试题八任选一题)

阅读下列说明和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函数中三种对象的生成方式是等价的。

单项选择题
问答题 简答题