題 1 分析以下程序的執行結果
#include<iostream.h>
class Sample
{
int x,y;
public:
Sample(){x=y=0;}
Sample(int a,int b){x=a;y=b;}
void disp()
{
cout<<"x="<<x<<",y="<<y<<endl;
}
};
void main()
{
Sample s1,s2(2,3);
s1.disp();
s2.disp();
}
解:
本題說明了構造函數的調用順序。首先定義了一個類Sample,在main()中定義了它的兩個對象,定義s1對象時調用其默認構造函數(x=0,y=0),定義s2對象時調用其重載構造函數(x=2,y=3),然后,調用各自的成員函數輸出各自的數據成員。所以輸出為:
x=0,y=0
x=2,y=3----------------------------------------------- 題 2 分析以下程序執行的結果
#include<iostream.h>
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"<<endl;
else
cout<<"x!=y"<<endl;
}
void disp()
{
cout<<"x="<<x<<",y="<<y<<endl;
}
};
void main()
{
Sample s1(2,3);
s1.disp();
s1.~Sample();
}
解:
本題說明了可以顯式調用析構函數。首先定義了一個類Sample,在main()中定義了它的一個對象,定義s1對象時調用其重載構造函數(x=2,y=3),然后,調用其成員函數輸出數據成員,然后調用一次析構函數,最后在退出程序時又自動調用析構函數,所以輸出為:
x=2,y=3
x!=y
x!=y
注重:析構函數不同于構造函數,析構函數既能被顯式調用,也能被隱式調用。
---------------------------------------------------- 題 3 分析以下程序的執行結果
#include<iostream.h>
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"<<endl;
else
cout<<"x!=y"<<endl;
}
void disp()
{
cout<<"x="<<x<<",y="<<y<<endl;
}
};
void main()
{
Sample s1,s2(2,3);
s1.disp();
s2.disp();
}
解:
本題說明了析構函數的調用順序,這里定義了兩個對象,先順序調用s1和s2對象的構造函數,再調用各自的成員函數disp(),最后順序調用s2和s1的析構函數。所以輸出為:
x=0,y=0
x=2,y=3
x!=y
x=y