求
【填空题】判断以下程序第()行代码有误。
第21行输出的值为()。
第23行输出的值为()。
第24行输出的值为()。
第25行输出的值为()。
#include <iostream>
using namespace std;
class test
{
private:
int x;
int y;
public:
static int num;
static int Getnum()
{
x += 4;
num += 15;
return num;
}
};
int test::num = 10;
int main(void)
{
test a;
cout << test::num << endl;
test::num = 20;
cout << test::num << endl;
cout << test::Getnum() << endl;
cout << a.Getnum() << endl;
system("pause");
return 0;
}
自己跑一下不就行了😂
问题分析: 本问题其实是给了一个代码段,然后希望我们分析代码有哪些问题,以及执行某些语句时的输出值。从代码来看,主要是涉及到了C++中静态数据成员和静态函数使用的问题。
解决方案: 根据对代码的分析,我认为下面代码的问题和第21、23、24、25行的输出值应该是这样的:
问题:
输出值:
下面是对于问题的逐一解决:
对于静态数据成员的使用,在代码中并没有对其做出使用。关于静态数据成员的作用和使用,可以详细了解一下。静态数据成员主要是指在类中用static修饰的成员,它和非静态数据成员的区别在于静态成员是该类的所有对象所共有的,不依赖于类的任何对象而存在,而非静态成员是各个对象所单独拥有的,是属于对象的,每个对象都拥有其自己的一份。在使用静态数据成员时,需要在类定义之外进行初始化,且只能初始化一次。具体如何初始化,可以在类外使用类名和作用域分辨符进行初始化。
对于函数的问题,主要在于push函数和pop函数没有对空栈的问题进行判断,可能造成程序崩溃。为了避免这种情况的发生,可以在执行pop函数之前判断栈是否为空,如果为空则返回错误信息,不进行弹出操作。
具体解决办法如下:
//入栈,将e压入顺序栈S中
Status push(SqStack &S,SElemType e){
//判断栈是否满栈
if(S.top-S.base==S.stackSize) return ERROR;
//将e存入S.top,存入栈顶,栈顶指针top++向上移动
*S.top++=e;
return OK;
}
//出栈,将栈顶元素给e
Status pop(SqStack &S,SElemType &e){
//判断栈内是否有元素,为空栈
if(S.top==S.base) return ERROR;
//栈顶指针下移,将栈顶元素赋给e
e=*--S.top;
return OK;
}
具体使用方法可以如下:
//生成全局随机数
class RandomNumberGenerator {
public:
RandomNumberGenerator() {
srand((int)time(0));
}
int operator() () const {
return rand();
}
};
修改inStack函数,如下:
Status inStack(SqStack &S, int i) {
RandomNumberGenerator rnd;
for (int j = 0; j < i; j++) {
//判断是否栈满
if (S.top-S.base == S.stackSize) return ERROR;
*S.top++ = rnd(); //随机填充栈空间
}
return OK;
}
具体代码如下:
int main() {
//定义栈S
SqStack S;
int e;
// 顺序栈初始化
InitStack(S);
//为顺序栈赋值
cout << "为顺序栈赋值多少个随机值:" << endl;
cin >> e;
//为顺序栈随机赋值e个元素
inStack(S, e);
cout << "顺序栈赋值完成:" << endl;
//遍历打印顺序栈
printStack(S);
cout << "顺序栈进栈:" << endl;
cout << "要进栈的元素是:" << endl;
cin >> e;
//将e压栈
push(S, e);
cout << "顺序栈进栈完成:" << endl;
printStack(S);
cout << "顺序栈出栈:" << endl;
//栈顶元素出栈给e
pop(S, e);
cout << "顺序栈出栈完成:" << endl;
printStack(S);
cout << "出栈元素为:" << endl;
cout << e << endl;
cout << "顺序栈栈顶元素:" << endl;
//获取栈顶元素
GetTop(S, e);
cout << e << endl;
delete[] S.base; //释放内存
return 0;
}
完整代码如下: