題 1.分析以下程序執行的結果
#include<iostream.h>
#include<stdlib.h>
class Sample
{
public:
int x,y;
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(2,3);
s1.disp();
}
解:本題說明了重載構造函數的定義方法。首先定義了一個類Sample,在main()中定義了它的一個對象,定義s1對象時調用其重載構造函數(x=2,y=3),然后,調用其成員函數輸出數據成員。所以輸出為: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();
}
解:本題說明了析構函數的定義方法。首先定義了一個類Sample,在main()中定義了它的一個對象,定義s1對象時調用其重載構造函數(x=2,y=3),然后,調用其成員函數輸出數據成員,最后在退出程序時自動調用析構函數。所以輸出為:
x=2,y=3
x!=y
注重:析構函數在對象的作用域結束時被自動隱式調用。 ---------------------------------------------------- 題 3.分析以下程序的輸出結果
#include<iostream.h>
class Sample
{
int x;
public:
Sample(int a)
{
x=a;
cout<<"constrUCting object:x="<<x<<endl;
}
};
void func(int n)
{
static Sample obj(n);
}
void main()
{
func(1);
func(10);
}
解:本題說明靜態對象構造函數的調用情況,由于在func()函數中定義的對象obj是靜態對象,故只被構造一次,所以輸出為:
counstructing object:x=1
注重:靜態對象和靜態變量一樣,只被構造一次。塊作用域的靜態變量,在首次進入到定義該靜態對象的函數時,構造該靜態對象,以后進入該函數時不再構造靜態對象。 ------------------------------------------------------ 題 1.4 分析以下程序的執行結果
#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 s(2,3), *p=&s;
p->disp();
}
解:本題說明了對象指針的使用方法。這里通過指向對象的指針來調用對象的成員函數。對象指針p指向對象s,p->disp()等價于s.disp()。所以輸出為: x=2,y=3.