C++是面向對象的語言,對象是類的實例。C++程序員把重點放在稱為“類”的用戶自定義類型上。
? C++中的類是由C的結構演變而來的,結構是由其他類型相關元素組成的一種聚合數(shù)據(jù)類型。比如下面就是一個結構的定義:
Struct Time{
?? int hour;
?? int minute;
?? int second;
};
程序可以直接訪問結構中的元素,并可對其進行任意修改,比如:
Time timeObject;
TimeObject.hour = 200; //0 <= hour <= 23
這樣就將一些無效值賦給了結構中的成員。這是C結構的缺點,而C++的類卻很好的解決了這種問題。
?
class Time{?????????????????? //1
public:?????????????????????? //2
?? Time();?????????????????? //3
?? void setTime(int, int, int);??? //4
?? void printMilitary();??????? //5
?? void printStandard();??????? //6
private:???????????????????? //7
?? int hour;???????????????? //8
?? int minute;?????????????? //9
?? int second;?????????????? //10
};???????????????????????? //11
?
正如你所看到的,類不僅封裝了數(shù)據(jù)成員,而且還封裝了成員函數(shù)?!皃ublic”和“private”是成員訪問說明符,3-6行屬于public成員,8-10行屬于private成員。public成員可以由類的使用者來調用,而private成員只能由成員函數(shù)和友元訪問。我們一般將成員函數(shù)聲明為public,供類的用戶調用,所以public成員函數(shù)又叫類的接口。數(shù)據(jù)成員聲明為private是為了不讓類的用戶對數(shù)據(jù)進行任意修改,甚至是錯誤的修改。大家有可能注意到了與類同名的Time()成員函數(shù),它是類的構造函數(shù),聲明類對象時會自動調用,它用來初始化數(shù)據(jù)成員。
? 我們來看一個具體問題,以便更深刻的了解C++的類。
?
#include
?
class Time{
public:
?? Time();?????????????????????????? //3
?? void setTime(int, int, int);
?? void printMilitary();
?? void printStandard();
private:
?? int hour;
?? int minute;
?? int second;
};??????????????????????????????????? //13
?
Time :: Time(){hour = minute = second=0;}
?
void Time :: setTime(int h, int m, int s)
{
?? hour = (h >= 0 && h < 24)?h:0;
?? minute = (m >= 0 && m < 60)?m:0;
?? second = (s >= 0 && s < 60)?s:0;
}
?
void Time :: printMilitary()
{
?? cout<<(hour < 10?”0”:””)<<hour<<”:”
????? <<(minute < 10?”0”:””)<<minute;
}
?
void Time :: printStandard()
{
?? cout<<((hour == 0||hour ==12)?12:hour % 12)
????? <<”:”<<(minute < 10?”0”:””)<<minute
????? <<”:”<<(second < 10?”0”:””)<<second
????? <<(hour < 12?”AM”:”PM”);????????? //35
}
?
int main()
{
?? Time t;
?
?? t.printMilitary();?????? //用軍用格式輸出自動初始化的時間。
?? cout<<”/n”;??????????
?? t.printStandard();????? //用標準格式輸出自動初始化的時間。?
?? cout<<”/n/n”;
?
?? t.setTime(13, 20, 15);?? //正確設置時間。
?? t.printMilitary();
?? cout<<”/n”;
?? t.printStandard();
?? cout<<”/n/n”;
?
?? t.setTime(99, 99, 99);? //錯誤設置時間。
?? t.printMilitary();
?? cout<<”/n”;
?? t.printStandard();
?? cout<<endl;
?
?? return 0;
}
?
3-13行為類的定義,15-35行是成員函數(shù)的定義,可以在類的定義中定義成員函數(shù),但這不是好的習慣,建議在類定義外定義,在類定義外定義成員函數(shù)時要在函數(shù)名前加上類名和“::”運算符。