C++习题与解析(类和对象-05) |
|
www.nanhushi.com 佚名 不详 |
题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 注意:静态数据成员脱离具体的对象独立存在,其存储单元不是任何对象存储空间的一部分,但逻辑上所有对象都共享这一存储单元,对静态数据成员的任何操作都会访问这一存储单元,从而影响这一存储单元的所有对象。所以说静态数据成员不是对象成员,在引用时不需要用对象名。
|
|
|
文章录入:杜斌 责任编辑:杜斌 |
|
上一篇文章: C++习题与解析(类和对象-04) 下一篇文章: C++习题与解析(类和对象-06) |
【字体:小 大】【发表评论】【加入收藏】【告诉好友】【打印此文】【关闭窗口】 |
|
|