一个c++的题目

来源:百度知道 编辑:UC知道 时间:2024/09/23 09:12:14
已知类SubClass的getSum方法返回其父类成员与类SubClass成员j的和,类SuperClass中的getSum为纯虚拟函数‘程序中的第23行有错误,请修改该错误并给出修改后的完整结果,然后完善程序中的空缺,分析程序运行到第15行且尚未执行第15行的语句时成员变量j的值,最后给出程序运行后的输出结果。
[C++代码]
行号 代码
O1 #include <iostream>
02 using namespace std;
03 class SuperClass {
04 private:
05 int i;
06 public:
07 SuperClass(){ i = 5;}
08 virtual iht getValueO { return i; }
09 virtual int getSum()=0;
lO };
11 class SubClass:public SuperClass{
12 int j;
13 public:
14 SubClass(int j) :j(0){
15 ___(1)___ =j; //用参数j的值更新数据成员
16 };
17 int getValue(){return j;}
18 int getSum(){
19 return ___(2)___ getValue() + j;
20 }
21 };
22 void main(void) {
23 SuperClass s = new SubClass(-3);
24 cout << s->getValue() << " ";
25 cout << s->getSum() << endl;
26 d

11行:定义一个以SuperClass类为基类的继承类SubClass。

14行:使用初始化成员列表来对SubClass类中的数据成员j赋值(j初始化为0)。SubClass(int j)括号中的j没用到,: j(0)这个j是数据成员j。

(1)___ =j; 应该是this->j = j;

(2)___ getValue() + j; 应该是 SuperClass::getValue() + j;

23 SuperClass s = new SubClass(-3);

应该是

23 SuperClass* s = new SubClass(-3);

程序运行到第15行且尚未执行第15行的语句时成员变量j的值是任意值,因为其未被初始化或赋值。

预期运行结果:

-3 2

你这个程序就算照我那样改了也运行不了,有很多问题:

问题1:

08 virtual iht getValueO { return i; } 这一句可能是你手误吧......

问题2:

抽象基类中没有virtual destructor,这将导致这一句:

delete s;

造成内存泄露,因为只有基类的部分被delete了而SubClass类的部分没有......

问题3:

22 void main(void)
符合标准的编译器不会让这一句编译通过......

11行: 定义子类Subclass,它的父类是Superclass

14行;Subclass()是父类的构造函数(第4行),这里有了参数,所以叫重载
不过有个 ":j(0)"我就搞不懂了

11行:SuperClass 是父类
14行:函数的重载。。。。。