1。
class a{
public:
a() {cout<<"a!"<<endl;}
virtual void disp(){cout<<" a::disp()!"<<endl;}
virtual ~a(){cout<<"~a!"<<endl;}
};
class b:public a{
public:
b(){cout<<"b!"<<endl;}
~b(){cout<<"~b!"<<endl;}
};
class c:public b{
public:
c(){cout<<"c!"<<endl;}
void disp(){cout<<"c::disp()!"<<endl;}
~c(){cout<<"~c!"<<endl;}
};
void main()
{
a *p=new c();
p->disp();
delete p;
}
输出结果:
a!
b!
c!
c::disp()!
~c!
~b!
~a!
若a构造函数a()前没有virtual关键字,输出为a::disp()!
若a析构函数~a()前没有virtual关键字,输出为~a!而不是~c!~b!~a!
2。写一个函数 int p(int i, int N);
能够输出i到N再到i,即以参数1,7调用函数,输出结果为
1
2
3
4
5
6
7
6
5
4
3
2
1
要求只用一个语句完成,不允许用?:等n多操作符和关键字。只能用一个printf库函数
include <stdio.h> int p(int i, int N)
{
return (printf("%d\n", i))
&& ( i<N
&& (p(i+1, N)
|| (!printf("%d\n", i))));
}
int main(void)
{
p(1,7);
}
|