C++是面向?qū)ο蟮恼Z言,對象是類的實(shí)例。C++程序員把重點(diǎn)放在稱為“類”的用戶自定義類型上。
? C++中的類是由C的結(jié)構(gòu)演變而來的,結(jié)構(gòu)是由其他類型相關(guān)元素組成的一種聚合數(shù)據(jù)類型。比如下面就是一個結(jié)構(gòu)的定義:
Struct Time{
?? int hour;
?? int minute;
?? int second;
};
程序可以直接訪問結(jié)構(gòu)中的元素,并可對其進(jìn)行任意修改,比如:
Time timeObject;
TimeObject.hour = 200; //0 <= hour <= 23
這樣就將一些無效值賦給了結(jié)構(gòu)中的成員。這是C結(jié)構(gòu)的缺點(diǎn),而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成員可以由類的使用者來調(diào)用,而private成員只能由成員函數(shù)和友元訪問。我們一般將成員函數(shù)聲明為public,供類的用戶調(diào)用,所以public成員函數(shù)又叫類的接口。數(shù)據(jù)成員聲明為private是為了不讓類的用戶對數(shù)據(jù)進(jìn)行任意修改,甚至是錯誤的修改。大家有可能注意到了與類同名的Time()成員函數(shù),它是類的構(gòu)造函數(shù),聲明類對象時會自動調(diào)用,它用來初始化數(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();????? //用標(biāo)準(zhǔn)格式輸出自動初始化的時間。?
?? cout<<”/n/n”;
?
?? t.setTime(13, 20, 15);?? //正確設(shè)置時間。
?? t.printMilitary();
?? cout<<”/n”;
?? t.printStandard();
?? cout<<”/n/n”;
?
?? t.setTime(99, 99, 99);? //錯誤設(shè)置時間。
?? t.printMilitary();
?? cout<<”/n”;
?? t.printStandard();
?? cout<<endl;
?
?? return 0;
}
?
3-13行為類的定義,15-35行是成員函數(shù)的定義,可以在類的定義中定義成員函數(shù),但這不是好的習(xí)慣,建議在類定義外定義,在類定義外定義成員函數(shù)時要在函數(shù)名前加上類名和“::”運(yùn)算符。