}
答:AA::n=0
d1.n=1
d2.n=2
d1.n=4
d2.n=4
[解析]由于数据成员n的访问属性是公有的,所以在类外可访问它;又它是静态变量,所以具有全局性。在构造函数中,执行的是n++操作,即每次调用构造函数n就加1。当程序开始时,因未定义对象,所以n的值为初始化时的值,则输出为“AA::n=0”。当定义了对象d1后,由于调用了构造函数,则该对象中n=1,故输出“d1.n=1”。同理,对象d2输出“d2.n=2”。由于接下来生成了两个对象d3和d4,调用两次构造函数,n两次加1,此时n=4,所以下面两条语句的输出为“d1.n=4”和“d2.n=4”。
35.写出下列程序的输出结果。
#include
class AA {
public:
AA{} { cout<<”Constructor of AA. \n”; fun(); }
virtual void fun() { cout<<”AA::fun() calle
D.\n”; }
};
class BB:public AA {
public:
BB(){ cout<<”Constructor of B
B.\n”; fun(); }
void fun() { cout<<”BB::fun() calle
D.\n”; }
};
void main()
{ BB d; }
答:Constructor of AA.
AA::fun() called.
Constructor of BB.
BB::fun() called.
[解析]虽然函数fun()说明为虚函数,但当在构造函数中被调用时,呈现的是静态联编,即基类和派生类都调用各自的函数fun()。所以,当生成对象d时,先调用基类的构造函数,在构造函数中又调用自己的函数“fun()”,所以输出为“Constructor of AA.”和“AA::fun() called.”。同理调用派生类的构造函数时,生成的输出为“Constructor of BB.”和“BB::fun() called.”。
36.请给出下面的程序的输出结果。
#include
template
void sort(T* a,int n)
{ T num;
for(int i=0;i
{ for(int j=i;j
if(a[j]>a[j+1])
{ num=a[j]; a[j]=a[j+1]; a[j+1]=num; }
}
for(i=0;i
cout<
cout<
}
void main()
{ int iver[5]={ 12,45,9,23,37 };
double dver[5]= { 22.3,56.7,43.5,13.8,8.6 };
sort(iver,5);
sort(dver,.5);
}
答:9 12 23 37 45
8.6 13.8 22.3 43.5 56.7
[解析]这是使用模板的例子。函数sort是一个递增的排序函数,T是个模板。当数组是整型数据类型时,它为整型数组排序;当数组为双精度数据类型时,它为双精度数组排序。所以输出如上结果。