2_成員函數(Member Functions)
阿新 • • 發佈:2018-02-06
定義 -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)