你的程式有物件嗎???——淺談Class(c++)
阿新 • • 發佈:2019-02-08
你的程式有物件嗎???
c++是一種
(雜種語言)融合了面向過程和麵向物件的一種高階語言。平時競賽中大家使用的很多是面向過程(至少在我這裡是的)。那麼,面向物件是什麼呢?
class(物件)就像一個屬於一個教室的櫃子,其中每個人能拿出來的叫公共的東西(public),只能通過公共的東西調動的叫私有的東西(private)
看到這,如果學過結構體的同學可能會掀桌(內心:struct!你以為換了個馬甲我就不認識你了!)……等下,被衝動,結構體可沒物件高階(可能是因為大家都在爭取物件吧)
class完全碾壓了struct(struct:喵喵喵?),因為struct比較虛,它只能包含比較垃圾的資料元素(struct&資料元素:喵喵喵?)而class能包含較複雜的函式。如下:
struct Struct{
int name1;
int name2;
}Something,Array[1000];
class Class{
int name0;//public外預設為private
public:
int name1;
void name2(){
}
private:
int name3;
void name4(){
}
}Something2,Array2[i];
其實class和struct定義沒什麼區別,但實現的東西明顯class更多。但是到這,class的神通還沒施展出來……
為了下面的講解,我們將要建立一個時鐘的類(藉助了我學的教程):
#include<iostream>
using namespace std;
class Clock{
public:
void Set_New_Time(int New_Hour,int New_Minute,int New_Second){
hour=New_Hour;
minute=New_Minute;
second=New_Second;
}
private: //private可以保護資料不被人從外部破壞
int hour,minute,second;
}
Clock::showTime(){
cout <<hour<<":"<<minute<<":"<<second<<endl;
}
int main(){
Clock My_New_Clock;
int second,minute,hour;
cin>>second>>minute>>hour;
My_New_Clock.Set_New_Time(second,minute,hour);
My_New_Clock.Show_Time();
return 0;
}
神通一:建構函式和解構函式
建構函式是一個與類名一樣的函式,用來為類中元素賦初值,如下:
#include<iostream>
using namespace std;
class Clock{
public:
void Set_New_Time(int New_Hour,int New_Minute,int New_Second){
hour=New_Hour;
minute=New_Minute;
second=New_Second;
}
Clock(int New_Hour,int New_Minute,int New_Second){
hour=New_Hour;
minute=New_Minute;
second=New_Second;
}
private: //private可以保護資料不被人從外部破壞
int hour,minute,second;
}
Clock::showTime(){
cout<<hour<<":"<<minute<<":"<<second<<endl;
}
int main(){
Clock My_New_Clock;
int second,minute,hour;
cin>>second>>minute>>hour;
My_New_Clock.Clock(1,2,3);
My_New_Clock.Set_New_Time(second,minute,hour);
My_New_Clock.Show_Time();
return 0;
}
要注意的是,建構函式也能複製哦……但這裡不講。(其實是我也懵)
有建構函式,肯定會有解構函式(不要問我為什麼) 它就是建構函式前加個”~”,能回收“垃圾” 。
神通二:組合類
組合類是一個類中包含另一個了,如下:
class Worker{
private:
string name;
int age;
string job;
public:
string Give_A_Job(string job){
return job;
}
};
class Company{
public:
//something……
private:
int Number;
Worker My_Worker[100000];//here!!!!!
};
神通三:繼承
這裡很好理解,就是繼承遺產一個類的所有東西,如下
class A{
//something
};
class B:public A{
//something
}
剩下的神通(網上盜來的):
- 多型:多型意味著呼叫成員函式時,會根據呼叫函式的物件的型別來執行不同的函式
- 抽象:資料抽象是指,只向外界提供關鍵資訊,並隱藏其後臺的實現細節,即只表現必要的資訊而不呈現細節
- 封裝:封裝是面向物件程式設計中的把資料和操作資料的函式繫結在一起的一個概念,這樣能避免受到外界的干擾和誤用,從而確保了安全