打印本文 打印本文  关闭窗口 关闭窗口  
C++习题与解析(类和对象-05)
作者:佚名  文章来源:不详  点击数  更新时间:2008/4/18 14:41:09  文章录入:杜斌  责任编辑:杜斌

题4.分析以下程序的执行结果 
#include 
#include 
class Sample 

public: 
int x,y; 
Sample(){x=y=0;} 
Sample(int a,int b){x=a;y=b;} 
void disp() 

cout<<"x="<else 
cout<<"x!=y"<
}; 

void main() 


题5.分析以下程序的执行结果 
#include 
class Sample 

int x,y; 
public: 
Sample(){x=y=0;} 
Sample(int a,int b){x=a,y=b;} 
~Sample() 

if(x==y) 
cout<<"x=y"<else 
cout<<"x!=y"<
void disp() 

cout<<"x="<
}; 

void main() 

Sample(2,3); 


解: 
本题说明了常量对象的构造函数和析构函数的调用情况。在main()中定义了一个常量对象,常量对象在构造之后立即析构。所以输出为: 
x!=y 
注意:常量对象的作用域不是整个main()函数,而是仅限于包含该常量的值表达式,表达式一旦计算完成,其中的对象就按构造的逆序析构。 



题6.分析以下程序的执行结果 
#include 
class Sample 

public: 
Sample(); 
Sample(int); 
~Sample(); 
void display(); 
protected: 
int x; 
}; 

Sample::Sample() 

x=0; 
cout<<"constructing normally\n"; 


Sample::Sample(int m) 

x=m; 
cout<<"constructing with a number:"<

void Sample::display() 

cout<<"display a number:"<

Sample::~Sample() 

cout<<"destructing\n"; 


void main() 

Sample obj1; 
Sample obj2(20); 
obj1.display(); 
obj2.display(); 


解: 
本题构造函数与析构函数的调用顺序。这里定义了两个对象,先顺序调用obj1和obj2对象的构造函数,再调用各自的成员函数disp(),最后顺序调用obj2和obj1的析构函数。所以输出为: 
constructing nomally 
constructing with a number:20 
display a number:0 
display a number:20 
destructing 
destructing 



题7.分析以下程序的执行结果 
#include 
class Sample 

int n; 
static int sum; 
public: 
Sample(int x){n=x;} 
void add(){sum+=n;} 
void disp() 

cout<<"n="<
}; 

int Sample::sum=0; // 静态数据成员赋初值 

void main() 

Sample a(2),b(3),c(5); 
a.add(); 
a.disp(); 
b.add(); 
b.disp(); 
c.add(); 
c.disp(); 


解: 
本题说明静态数据成员的使用方法。在类中定义了一个静态数据成员sum,在main()之前给它赋初值0,然后在main()中定义了三个对象,并执行各自的add()和disp()方法。所以输出为: 
n=2,sum=2 
n=3,sum=5 
n=5,sum=10 
注意:静态数据成员脱离具体的对象独立存在,其存储单元不是任何对象存储空间的一部分,但逻辑上所有对象都共享这一存储单元,对静态数据成员的任何操作都会访问这一存储单元,从而影响这一存储单元的所有对象。所以说静态数据成员不是对象成员,在引用时不需要用对象名。 
打印本文 打印本文  关闭窗口 关闭窗口