2017年計算機等級考試二級C++輔導(dǎo):類對象數(shù)組和靜態(tài)成員

字號:


    一、類對象數(shù)組
    類的對象和C++其他數(shù)據(jù)類型一樣,也可以為其建立數(shù)組,數(shù)組的表示方法和結(jié)構(gòu)一樣。
    #include iostream.h
    class Date
    {
    int mo,da,yr;
    public:
    Date(int m=0,int d=0, int y=0) { mo=m; da=d; yr=y;}
    void display() const { cout< };
    int main()
    {
    Date dates[2];
    Date today(12,31,2003);
    dates[0]=today;
    dates[0].display();
    dates[1].display();
    return 0;
    }
    1.類對象數(shù)組和默認(rèn)構(gòu)造函數(shù)
    在前面已經(jīng)說過,不帶參數(shù)或者所有參數(shù)都有默認(rèn)值的構(gòu)造函數(shù)叫做默認(rèn)構(gòu)造函數(shù)。如果類中沒有構(gòu)造函數(shù),編譯器會自動提供一個什么都不做的公共默認(rèn)構(gòu)造函數(shù) 。如果類當(dāng)中至少有一個構(gòu)造函數(shù),編譯器就不會提供默認(rèn)構(gòu)造函數(shù)。
    如果類當(dāng)中不含默認(rèn)構(gòu)造函數(shù),則無法實例化其對象數(shù)組。因為實例花類對象數(shù)組的格式不允許用初始化值來匹配某個構(gòu)造函數(shù)的參數(shù)表。
    上面的程序中,main()函數(shù)聲明了一個長度為2的Date對象數(shù)組,還有一個包含初始化值的單個Date對象。接著把這個初始化的Date對象賦值給數(shù)組中第一個對象,然后顯示兩個數(shù)組元素中包含的日期。從輸出中可以看到,第一個日期是有效日期,而第二個顯示的都是0。
    當(dāng)聲明了某個類的對象數(shù)組時,編譯器會為每個元素都調(diào)用默認(rèn)構(gòu)造函數(shù)。
    下面的程序去掉了構(gòu)造函數(shù)的默認(rèn)參數(shù)值,并且增加了一個默認(rèn)構(gòu)造函數(shù)。
    #include
    class Date
    {
    int mo, da, yr;
    public:
    Date();
    Date(int m,int d,int y) { mo=m; da=d; yr=y;}
    void display() const { cout < };
    Date::Date()
    {
    cout < mo=0; da=0; yr=0;
    }
    int main()
    {
    Date dates[2];
    Date today(12,31,2003);
    dates[0]=today;
    dates[0].display();
    dates[1].display();
    return 0;
    }
    運行程序,輸出為:
    Date constructor running
    Date constructor running
    12/31/2003
    0/0/0
    從輸出中可以看出,Date()這個默認(rèn)構(gòu)造函數(shù)被調(diào)用了兩次。
    2.類對象數(shù)組和析構(gòu)函數(shù)
    當(dāng)類對象離開作用域時,編譯器會為每個對象數(shù)組元素調(diào)用析構(gòu)函數(shù)。
    #include iostream.h
    class Date
    {
    int mo,da,yr;
    public:
    Date(int m=0,int d=0,int y=0) { mo=m; da=d; yr=y;}
    ~Date() {cout< void display() const {cout< };
    int main()
    {
    Date dates[2];
    Date today(12,31,2003);
    dates[0]=today;
    dates[0].display();
    dates[1].display();
    return 0;
    }
    運行程序,輸出為:
    12/31/2003
    0/0/0
    Date destructor running
    Date destructor running
    Date destructor running
    表明析構(gòu)函數(shù)被調(diào)用了三次,也就是dates[0],dates[1],today這三個對象離開作用域時調(diào)用的。