1. 程式人生 > >2_成員函數(Member Functions)

2_成員函數(Member Functions)

定義 -s oid color space str 聲明 mon 日期

  成員函數以定從屬於類,不能獨立存在,這是它與普通函數的重要區別。所以我們在類定義體外定義成員函數的時候,必須在函數名之前冠以類名,如Date::isLeapYear()。但如果在類定義體內定義成員函數時,並不需要在成員函數前冠以類名。

//=============================================
//日期類應用程序
//=============================================

#include <iostream>
#include <iomanip>

using namespace std;

/**
*類定義體
*/ class Date{ private: int year,month,day; public: //在類定義體內定義成員函數,不需要在函數名前冠以類名 void set(int y,int m,int d) { year = y; month = m; day = d; }; bool isLeapYear(); void print(); }; //成員函數類定義體外定義 bool Date::isLeapYear() { return (year%4==0 && year%100
!=0)||(year%400==0); } void Date::print() { cout<<setfill(0); cout<<setw(4)<<year<<-<<setw(2)<<month<<-<<setw(2)<<day<<\n; cout<<setfill( ); }

  需要註意的是,函數定義的花括號後面沒有分號,而類定義的花括號後面以定由分號,這是由於C語言的歷史原因造成的。class機制是建立在struct機制之上,所以要和struct對應。

  在類內定義的成員函數,就默認聲明內聯函數的性質,因此當代碼量較小,不超過3行的成員函數,放在類中定義比較合適。同樣,我們也可以在類外定義成員函數,對編譯提出內聯要求。

代碼如下:

//=============================================
//日期類應用程序
//=============================================

#include <iostream>
#include <iomanip>

using namespace std;

/**
*類定義體
*/
class Date{
private:
    int year,month,day;
public:
    //在類定義體內定義成員函數,不需要在函數名前冠以類名
    void set(int y,int m,int d)
    {
        year = y;
        month = m;
        day = d;
    };
    bool isLeapYear();
    void print();
};

//成員函數類定義體外定義

inline bool Date::isLeapYear() //顯示內聯
{
    return (year%4==0 && year%100!=0)||(year%400==0);
}

void Date::print()
{
    cout<<setfill(0);
    cout<<setw(4)<<year<<-<<setw(2)<<month<<-<<setw(2)<<day<<\n;
    cout<<setfill( );
}

2_成員函數(Member Functions)