2、下面程序的运行结果是(C)//不会,
#include
using namespacestd;
class Base
{
int x;
public:
Base(int b):x(b){}
virtual voiddisplay()
{
cout<<x<<endl;<p="">
}
};
classDerived:public Base
{
int y;
public:
Derived(int d):Base(d),y(d) {}//这里不会调用Base的构造函数从而改变x的值吗?
void display()
{
cout<<y<<endl;<p="">
}
};
int main()
{
Base b(2);
Derived d(3);
b.display();
d.display();
Base *p=&d;
p->display();
system("pause");
return 0;
}
A. 2 2 3 B.3 2 2 C. 2 3 3 D.2 3 2
解析:如果在Base的构造函数加一行:cout<<"Base:"<<x<<'\n';那么将输出:
Base:2
Base:3
2
3
3
为什么b.display();的结果是2,而不是三,我也不造,说不清
7、 下面程序的输出结果是()
#include <iostream>
using namespace std;
int i=0;
int fun(int n)
{
static int a=2;
a++;
return a*n;
}
int main()
{
int k=5;
{
int i=2;
k+=fun(i);
}
k+=fun(i);
cout<<k;
return 0;
}
A. 13 B. 14 C.15 D. 16
解析:网上有人说答案是14. 但我在vs2010里测试过,结果是11(因为第二个k+=运算时,i=0;inti=2的作用域只在定义它的{}块中);如果将i定义为1而不是0,则结果是15(因为,static局部变量的生命周期也是整个程序运行过程,所以第二个k+=运算时a=3,a++后a=4)。不明白这个结果啊完全~ps:int i=0;不能在头文件中这么定义吗?编译出错的说。