C++語言是面向對象的語言。所以類是C++里面的重點,類是對象的模板。
類的作用就是用來保存數據的。如果有個類class Date
就是用來保存日期的。保存了數據就可以通過其他成員函數去操作數據。
類的聲明部分
#include<iostream>using namespace std;class date { public: void SetDate(int y, int m, int d); int IsLeapYear(); void PRint();private: int year, month, day;};類的實現部分
void date::SetDate(int y, int m, int d){ year = y; month = m; day = d;}void date::Print(){ cout << year << "." << month << "." << day << endl;}int date::IsLeapYear(){ return(year %4 == 0 && year % 100 != 0) || (year % 400 == 0);}類的主體
int main(){ int m; date h; h.SetDate(2000, 1, 8); if (h.IsLeapYear()) cout << "2000 is leap year" << endl; h.Print(); system("pause"); return 0; }函數體有兩種寫法,一種是把函數體直接寫到頭后面,類的內部,叫做內聯函數。內聯函數最終產生的軟件比較大,但是會快一點。
可以把函數寫在類外面,使類的聲明部分不會太大,又保持內聯。實現如下:
inline void date::SetDate(int y, int m, int d){}或者把函數寫在外面,叫做外聯函數。一般情況下都喜歡寫到外面
int date::IsLeapYear()作用域操作符,表示函數式Date的成員函數
公有和私有
公有:
私有:如果有個函數在私有部分,private,則無法訪問。什么都不寫的情況下,默認是私有private的。其中有面向對象設計原則。
保護:protected。要學到繼承和派生才會詳細講解。
創建第二個類
#include<iostream> using namespace std; class date; class time {}; class people { public: void study(); void woring(date d); private: double height; double weight; double saving; date *Birthday; people *child; time t; };Date放在最后面就找不到了,C++只能前項引用,會出現syntax error: identifier ‘date’。所以要在第一行加入class date;
people class里面在放people child
不允許,則換成people *child
記得C++每個class后面都要有分號;semicolon
C++里還可以實現函數重載,兩個函數可以重名,但是里面的參數不能相同
為什么后面要使用指針呢? 如果前面有一整個class,就可以不用指針;如果前面只有class前項引用,就必須使用指針;
關于類中可否初始化的問題? class date { public: void SetDate(int y, int m, int d); int IsLeapYear(); void Print(); private: int year, month, day; }; int date::IsLeapYear() { return(year %4 == 0 && year % 100 != 0) || (year % 400 == 0); } void date::SetDate(int y, int m, int d) { year = y; month = m; day = d; } void date::Print() { cout << year << "." << month << "." << day << endl; }類里面用大括號封裝了數據和方法,把類實例化就變成了對象。 對象有屬性和行為。
對象
int main() { int m; date h; date date1; date dates[31]; date *pdate; date &date2 = date1; h.SetDate(2000, 1, 8); date1.SetDate(2000, 1, 2); dates[0].SetDate(2000, 1, 2); pdate = new date(); pdate->SetDate(2000, 1, 2); (*pdate).Print(); if(h.IsLeapYear()) cout << " is leap year" << endl; h.Print(); system("pause"); return 0; }date1和數組都可以直接操作,數組保存31個對象date2引用date1,date2就是date1的別名解引用 (*pdate).Print();